2016-09-16 3 views
0

私は次のように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を別のフォルダに実行可能に保つことは可能ですか?

+0

あなたのアプリケーションがそのパスにアクセスする権利を持っていない可能性がありますか? VSで同様の問題が発生しました。特にデバッグ時。 –

+0

いいえ、実行可能ファイルには適切な権限があります。 実行ファイルは、実行可能ファイルとは異なるフォルダにあるdll(Dll_1)をロードします - >ロードされたdll(Dll_1)はDll_1と同じフォルダにある別のdll(Dll_2)をロードしますが、両方dllは実行可能フォルダにありません。 しかし、私は実行可能ファイルが最初のdllをロードしていると思うが、それは動作しているが、2番目のdllは別のdllによってロードされている。それが問題だろうか? –

+0

(exeと他のフォルダからの)2組の_.dlls_は互換性がありませんか?それはあなたのローディング_other dll1_であり、_exe dll2_をロードしようとしている可能性がありますか?両方のフォルダに同じ2つのdllを持つショットを付けることができますか?あなたはどこに失敗するのかを正確に見るためには、(dll1の)より深く進む必要があります。 – CristiFati

答えて

0

実行可能ファイルとは別のフォルダからdllを参照することは可能です。 実行時に参照されたアセンブリをロードできない場合は、Assembly Resolverイベントが発生します。 私はthisリンクから基本的な考えを得ました。 他の方法もあります(プロービングとコードベース)。しかし、私はこれを一番気に入っていました。

0

あなたは(あなたの例ではC:\に)DLLのディレクトリを設定するために最初LoadLibrarySetDllDirectoryまたは単にSetCurrentDirectoryを使用することができます。

関連する問題