だから私は3つの部分を持っています:
- Lib: AnyCPU 用にコンパイルされた AC# ライブラリ。
- BridgeLib: x86 用にコンパイルされた C++/CLI ライブラリ。呼び出されたネイティブ C 関数をエクスポートし
bridgeEntry
、Lib のメソッドを呼び出します。 - NativeExe: BridgeLib.dll をロードして実行するネイティブ C++ Win32 アプリケーション
bridgeEntry
。
これらをすべて 1 つのディレクトリに配置すると、予想どおり、NativeExe を実行すると Lib のコードが実行されます。
ただし、次のようにディレクトリ構造を再配置すると:
├───exe
│ NativeExe.exe
│
└───libs
BridgeLib.dll
Lib.dll
物事は少し異なります。フォルダーが見つからないため、明らかにフォルダー内NativeExe.exe
での実行は失敗します。しかし、それはフォルダに移動して実行することで解決できます。これで、アプリケーションがロードされ、にジャンプします。しかし、ブリッジライブラリのフォルダーではなく、実行可能ファイルのフォルダー ( ) を探しているため、CLR は a でクラッシュします。exe
BridgeLib.dll
libs
..\exe\NativeExe.exe
BridgeLib.dll
bridgeEntry
FileNotFoundException
Lib.dll
exe
libs
これは非常に単純化された例であり、ディレクトリ構造を変更することはできません。しかし、他にどうすればこの問題を解決できますか?