dポイントプレゼントキャンペーン実施中!

ファイル名の異なる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ファイルはプロジェクトと同ディレクトリに
入っています。

A 回答 (2件)

LoadLibraryが成功していれば、2つの異なるDLLに対する連続したLoadLibraryが同じ値を返すことはありません。

例示部分に異常はありませんので、値の確認方法が誤っているか、例示部分以外のプログラムの書き方がおかしいと思われます。

プログラムから例示部分以外のコードをどんどん削除していって、例示部分を実行する必要最小限のコードにして試してみてください。最終的にCXXX_Dlgのメンバが数個とCWinAppだけになるはずですが、それでも同じ現象が発生するでしょうか。
    • good
    • 0

DLLファイルをプロジェクトと同じディレクトリに置いてあってもDLLを見つけられていない可能性があります。


VC++.Netでは現在のディレクトリがVC++.Net本体のディレクトリになってしまう場合があります。
これを解決するにはDLLがあるディレクトリにパスを通してみてください。

グローバル変数の宣言に関しては変数の名前を変えてやってみてください。
ちなみに他のモジュールのグローバル変数を使うにはexternを使います。
    • good
    • 0

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