激凹みから立ち直る方法

「import32.lib」から呼び出すのは「MessageBox()」という機能の実体ではなく「利用する為」の呼び出しです。 「MessageBox()」という機能を利用する際「MessageBox()」というプログラムから「import32.lib」内にある情報を参照する必要があります。 つまり参照先のプログラムからさらに別のファイルの情報を参照しているだけです。とはどういう事でしょうか?ご教授いただけないでしょうか?すみません。

「DLLについて。」の質問画像

質問者からの補足コメント

A 回答 (4件)

なんとなくC言語の本は無理そう。


こっちを読んだ方が良い気がします。
https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%8 …
    • good
    • 0

うーん、どう説明しよう・・・・



インポートライブラリに入っている MessageBox はこんなコードに
なってます。
#実際のコードは、関数ごとにLoadLibraryする必要はないとか、
#エラー処理とかで随分違うはず・・・

int MessageBox(・・・・)
{
    :(宣言等)
h = LoadLibrary("USER32.DLL"); // DLLをメモリにロード
proc = getProcAddress(h, "MessageBox"); // エントリポイントを取得
return proc(・・・・・・・); // 呼び出し
}

スタティックリンクライブラリ(インポートライブラリ)から
アプリにリンクされるのは、このスタブ的なコードだけ。
MessageBoxの実体は USER32.DLL の中にあります。
    • good
    • 0
この回答へのお礼

これが、わかるためにはC言語の本を読んだほうがいいと先生から言われたのですがこのことがわかるおすすめのC言語の本があればご教授いただけないでしょうか?すみません。

お礼日時:2021/04/22 15:23

>では、インポートライブラリから抽出して、


>Message Box ( )を呼び出すための情報になるのは、
>どういう事でしょうか?


「Message Box ( )を呼び出すための情報」というのは
要するにソースファイルの中に

MessageBox(・・・・

と書かれていること。これに基づいてインポートライブラリから
「USER32.DLL のMessage Boxを呼び出すオブジェクトコード」
が抽出され、アプリにスタティックリンクされます。
#インポートライブラリにはいろんな API を
#呼び出すオブジェクトコードがたくさん入っていますが
#使わないコードは抽出されず、リンクされません。

このリンクされたコードが DLL から Message Box のオブジェクト
コードを USER32.DLL からメモリにロードし実行するのです。
    • good
    • 0
この回答へのお礼

「USER32.DLL のMessage Boxを呼び出すオブジェクトコード」
が抽出され、アプリにスタティックリンクされます。
とは、どういう事でしょうか?ご教授いただけないでしょうか?
インポートライブラリからMessage Box (・・・・を抽出して、USER32.DLL
の中から、Message Boxを呼び出すという事でしょうか?ご教授いただけないでしょうか?すみません。

お礼日時:2021/04/21 18:49

import32.lib というのは「インポートライブラリ」と呼ばれる種類の


スタティックリンクライブラリで、アプリに直接リンクされます。

この中に USER32.DLL に入っている MessageBox という関数を呼び出す
コードがMessageBoxという名前で(わざと同名にして)入っているのです。

DLL中の関数を呼び出すには

LoadLibrary という関数で、DLLをメモリにロードし、
GetProcAddress で関数のエントリポイントのアドレスを
取得して、その関数ポインタを使って関数をコールする
必要があります。

これを全部プログラムして USER32.DLL の MessageBox を
呼び出すことも可能ですが、めんどくさいので、
全部やってくれるインポートライブラリを使うのが普通です。

あなた独自の DLL やそのインポートライブラリも Visual Studio
で作れるので、一遍遊んでみるとよくわかると思います。
    • good
    • 0
この回答へのお礼

では、インポートライブラリから抽出して、Message Box ( )を呼び出すための情報になるのは、どういう事でしょうか?ご教授いただけないでしょうか?すみません。

お礼日時:2021/04/21 17:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!