以下の画像のURLで特にインポートライブラリからMessage Box ()を呼び出すための情報を抽出するのが分かりません。ご教授いただけないでしょうか?すみません。
https://6900.teacup.com/cgu135/bbs/1067
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
zasx1093さんのご質問は、C言語についてではなく、Windows OSとリンカに関するものです。
ご覧になっている[1067] 無題は、書籍の一部を無断掲載したページですので、お勧めしません。
書籍全体を読めば分かることなのかもしれませんが、一部をつまみ食いして理解できるような話ではありません。ちゃんとした本を読みましょう。
詳しいことを知りたいならOSの勉強をした上で、DLL とはのようなものを読むことをお勧めします。
ご質問が「なぜ静的リンクや動的リンクを行うのか」であれば、
自分では全部を書けないから、というのが答えです。
また、必要のないものをなるべく減らして、OSが使うメモリを減らしたいとかいろいろな理由があります。
例えばzasx1093さんがmain.cの中で
printf("Hello World!!\n")
と書いたときに、zasx1093さんはprintfという名前とそれが何をしてくれるかを知っているだけですね。
実際には誰かがprintfという関数を作ってそれを提供してくれているのです。
ご質問が、「どうやって抽出するのか」であれば、以下のような方法です。
zasx1093さんがmain.cをコンパイルしたとき、Cコンパイラ本体がやることは、main.objを作って、リンカを呼び出すだけです。このとき、たくさんのオブジェクトファイルをまとめたライブラリがあり、その中からprintfという関数がどのオブジェクトに入っているかはリンカがライブラリの中にある一覧表を調べて決めています。こういうのを静的ライブラリとよび、関数本体と一覧表が一つのファイルに入っています。
MessageBoxの場合は、誰かが作った動的リンクライブラリの中にその関数が入っています。
それを呼び出すための一覧表が入っているのがインポートライブラリです。つまり、関数本体の入っている入れ物と一覧表の入っている入れ物が別々なのです。
抽出方法は、一覧表を見て、何をリンクすれば良いかなという処理を行っているだけです。
投稿2021/04/22 23:43
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/25 04:05
2021/04/27 02:20
0
自身はありませんが、回答してみます。
Sample1.cは、例えば、以下のように記載されていると思います。
c
1int main() 2 3//...省略(プログラマが記述した部分) 4MessageBox(); 5 6//...省略(プログラマが記述した部分) 7return 0; 8
しかし、Sample1.cには、MessageBox()の処理は書かれていないと思います。
そのため、どこかMessageBox()の処理がかかれた場所が必要です。
それが、インポートライブラリimport32.libになると思います。
MessageBox()の処理は、import32.libにかかれており、Smaple1.cを
完成させるためには、import32.libの情報が必要になります。
それが、
Message Box ()を呼び出すための情報
になると思います。
情報とは、import32.libにMessageBox()が含まれていること等に、なると思います。
最初は、MessageBox()のためには、import32.libが必要らしいと思っていればよいと思います。
投稿2021/04/22 15:22
編集2021/04/25 07:31退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/22 19:17
退会済みユーザー
2021/04/25 07:31
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。