1

DllImport() を介してネイティブ 32 ビット DLL を使用する 32 ビット .net アプリケーションがあります。ネイティブ DLL は内部のファイル解析ライブラリであり、C# への移植は人々が更新した場合 (他のソフトウェアが使用しているため) に問題になるため、これを使用する必要があります。

問題は、ネイティブ DLL で任意のメソッドを実行しようとすると、System.ExecutionEngineExceptionがスローされることです。実際、マネージド アプリケーションを、ネイティブ メソッドを呼び出すだけの単純なテスターに​​縮小しましたが、それでも失敗します。

私は 64 ビットの Windows 7 を使用していますが、すべてを 32 ビットのバイナリとしてコンパイルしているので問題ありません。

また興味深いことに、Dependency Walker でネイティブ DLL を見ると、msvcr90.dll が見つからないことが示されていますが、Dependency Walker で他のネイティブ DLL を開くと、参照されている msvcr90 を見つけることができます。 .dll で問題ありません。DLL 参照を台無しにするネイティブ DLL のコンパイルに問題がある可能性はありますか?

4

1 に答える 1

1

OK - 問題は少し霧がかかっていました。どうやら同僚がネイティブ DLL のメソッドを変更して、デフォルト値を持つ 1 つのパラメーターを含むようにしました (C++ は問題なく処理できます) が、ご存知のように、C# 3.5 はそうではありません。そのパラメーターに値を指定すると、すべてが正常に機能しました。

于 2010-04-21T06:18:48.293 に答える