私は次のようにLoadLibraryの機能を使用してC++ CLIライブラリをロードするC++のdllがあります。指定されたパスからBorland C++のdllからLoadLibraryを使用できますか?
HMODULE myDLL = LoadLibrary("DLLtoBeLoaded.dll");
を、これは動作します。 しかし私は、 "DLLtoBeLoaded.dll"を別のディレクトリ(実行可能ディレクトリとは異なります)にします。だから私は試しました:
HMODULE myDLL = LoadLibrary("C:\\DLLtoBeLoaded.dll");
これは動作しません。この後、myDLLはnullではありませんが、DLLtoBeLoaded.dllのコンストラクタは呼び出されません。 LoadLibrary関数は、実際に成功しているので、
EDIT
MYDLLはNULLではありません。しかし、それが動作していない理由は、DLLtoBeLoaded.dllが実行可能ディレクトリにもないいくつかのDLLを参照していることです(実行可能フォルダ内の参照されたDLLをコピーするだけで動作します)。参照可能なDLLを別のフォルダに実行可能に保つことは可能ですか?
あなたのアプリケーションがそのパスにアクセスする権利を持っていない可能性がありますか? VSで同様の問題が発生しました。特にデバッグ時。 –
いいえ、実行可能ファイルには適切な権限があります。 実行ファイルは、実行可能ファイルとは異なるフォルダにあるdll(Dll_1)をロードします - >ロードされたdll(Dll_1)はDll_1と同じフォルダにある別のdll(Dll_2)をロードしますが、両方dllは実行可能フォルダにありません。 しかし、私は実行可能ファイルが最初のdllをロードしていると思うが、それは動作しているが、2番目のdllは別のdllによってロードされている。それが問題だろうか? –
(exeと他のフォルダからの)2組の_.dlls_は互換性がありませんか?それはあなたのローディング_other dll1_であり、_exe dll2_をロードしようとしている可能性がありますか?両方のフォルダに同じ2つのdllを持つショットを付けることができますか?あなたはどこに失敗するのかを正確に見るためには、(dll1の)より深く進む必要があります。 – CristiFati