0

マネージ C++ アプリケーションから C# dll を呼び出しています。C# dll はカスタム フォルダーに配置されるため、マネージド C++ dll がそのフォルダーから C# を動的に読み込む必要があります。

これはすべて VC++ 2010 v100 および .net 4.0 です。

使用するつもりです

Assembly::LoadFrom("MyCSharp.dll")

LoadFrom 呼び出しが成功し、MyCSharp.DLL がロードされていることを確認できますが、マネージ C++ dll 内の関数がその DLL の機能にアクセスしようとすると、次のいずれかになります。

a) アプリケーションと同じ実行フォルダーに MyCSharp.DLL が存在しない場合に失敗する

b) MyCSharp.dll が実行中のフォルダーに存在する場合は成功しますが、メモリに 2 つのコピーが読み込まれ、::LoadFrom 呼び出しから読み込まれたコピーには明らかにアクセスしていません。

実行中の関数が明示的にロードされた C#-dll にリンクするのを妨げている原因がわかりません。

私が気付いていない VC++ マネージド c++ dll の構成上の問題の可能性があると思われます。

4

2 に答える 2

0

DLLがサブディレクトリにある場合は、そのフォルダをAppDomainのプライベートパスに追加する必要があります。私の知る限り、AppDomainが作成されると変更できないため、を使用してapp.configに追加する必要があります<probing> Element

于 2012-05-04T07:35:43.033 に答える
0

Assembly.AssemblyResolveを使用して、既に読み込まれているアセンブリを取得します。

于 2012-05-04T07:56:03.977 に答える