まず、私の状況を説明します。私は私にブラックボックスであるDLLライブラリを持っています。私はどの言語が書かれたのかは分かりません。私の推測それはC + +またはCでも、しかし、私は知らない。しかし、私はそれを使用する方法を知っているDLL関数を知っています。C#静的および動的にDLLをリンクする
ビジネスにまっすぐに。上記のDLLで動作するアプリケーションC#.NETを作成しています。私はすべての方法をリンクして私に知ってみましたが、1つだけが動作します:
- スタティック:
[DllImport("myDll.dll")]
- それは動作します。 - 動的:Kernel32.dll LoadLibrary/FreeLibrary - コード126 -
The specified module could not be found
で例外が発生しています。その問題は、依存性の欠如にある。 - Dynamic:Reflectionによって - Assembly.LoadFile(aPathFileName)を使用している場合、例外が発生しています:
The module was expected to contain an assembly manifest
。
私の問題は、私が実際に設定ファイルのいくつかの種類のブラックボックスdllにパスを指定する必要があるということです。私は今何をすることができますどのようなヒント、この問題を解決することができます頼むことができますか?より具体的には:設定ファイルから文字列をロードし、それを静的リンクDllImport(const string path)に必要な定数文字列を埋めるために使用する方法はありますか?または私が知らないDLLをダイナミックリンクする別の方法がありますか?
EDIT別の質問が重複する可能性に
回答:私は使用することはできませんメソッドにその質問参照の両方の答え。私が言ったように、私はLoadLibrary関数(例外126)を使用することはできませんし、また、私はハードコーディング可能なパスの戦利品を指定することはできません
この他の投稿が有効です。私はkernel32.dll SetDllDirectoryを呼び出すことができ、静的なDllImportによってリンクされた私のブラックボックスdllのメソッドを呼び出す前に、設定ファイルからのパスでそれを記入することができます!私はそれを試し、適切な答えを投稿します。 – user1916778