【初心者歓迎】C/C++室 Ver.86【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0563デフォルトの名無しさん
2013/10/08(火) 02:01:44.35「B.dllでA.dllの関数を呼び出す」事をしたいならそれはある種の遅延ロードでロードなんだけど…
「B.dllはA.dllをロードしない」ってのは具体的に何を目指しているの?
BをAに依存させない為に、exeなどからBに対してAの何かを渡してそれを元にBで目的の(Aの)関数を呼ぶ、だとしたら、
GetModuleHandleを使えば「Aのモジュール名+Aの目的関数名」から「Aのモジュールハンドル+Aの目的関数名」が、
GetProcAddressを使えば「Aのモジュールハンドル+Aの目的関数名」から「Aの目的関数のアドレス」が得られるので、
この三種類のうち一つをBに渡して処理し、得られたAの目的関数のアドレスを関数ポインタとして呼び出せば良い。
インタフェイスになるクラスを定義して、Aの中でその実装を行い、(関数ポインタを含む)インスタンスのポインタをBに渡しても良い。
単純にBのインポートセクションにAを書きたくないだけ、だとしたら、
関数を関数ポインタ経由で呼ぶようにして初期化などの段階でGetModuleHandleとGetProcAddressでその値を求めればよい。
■ このスレッドは過去ログ倉庫に格納されています