• ベストアンサー

LoadLibraryの戻り値(HMODULE)について

ファイル名の異なる2つのDLLを下記のソースの様 にLoadLibraryしたところA,Bとも同じアドレスが 戻って来てしまいます。これではFreeLibraryにて 開放しようとした時に、おかしな事になってしまう と思うのですが、なぜ同じアドレスが戻ってくるのか 分りません。 あと、A,Bをグローバル変数として宣言 したときに、既に宣言済みですと怒られます。これも よく分りません。何方か理由が分る方ご教授願います。 void CXXX_Dlg::ButtonClick() { // dllファイルロード HMODULE A = ::LoadLibrary("A.DLL"); HMODULE B = ::LoadLibrary("B.DLL"); } 環境:Win2K, VC++.Net 2003 MFC です。 DLLファイルはプロジェクトと同ディレクトリに 入っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

LoadLibraryが成功していれば、2つの異なるDLLに対する連続したLoadLibraryが同じ値を返すことはありません。例示部分に異常はありませんので、値の確認方法が誤っているか、例示部分以外のプログラムの書き方がおかしいと思われます。 プログラムから例示部分以外のコードをどんどん削除していって、例示部分を実行する必要最小限のコードにして試してみてください。最終的にCXXX_Dlgのメンバが数個とCWinAppだけになるはずですが、それでも同じ現象が発生するでしょうか。

その他の回答 (1)

回答No.2

DLLファイルをプロジェクトと同じディレクトリに置いてあってもDLLを見つけられていない可能性があります。 VC++.Netでは現在のディレクトリがVC++.Net本体のディレクトリになってしまう場合があります。 これを解決するにはDLLがあるディレクトリにパスを通してみてください。 グローバル変数の宣言に関しては変数の名前を変えてやってみてください。 ちなみに他のモジュールのグローバル変数を使うにはexternを使います。

関連するQ&A