1

プロジェクトで外部dllを使用しています。64ビットマシンでアプリケーションを実行しようとすると、がクラッシュしFileLoadExceptionます。32ビットシステムでは正常に動作するため、dllは32ビットであると思われます。ただし、プロジェクトのターゲットプラットフォームをx68に設定しても効果はありません。

私はc#の64ビットアプリケーションで32ビットdllを読み、64ビットアプリケーションで32ビットDLLライブラリをロードし、アプリ全体を32ビットプロセスとしてビルドする必要があることを示す他のいくつかのページを読みました(これは気になりません-64ビットウィンドウで実行可能である必要があります)、しかし、ターゲットプラットフォームを設定しない場合、64ビット開発マシンで32ビットアプリを構築する方法がわかりません...

コードはただです

static void Main(string[] args)
{
    var mf = new QuickFix43.MessageFactory();
    Console.WriteLine("running");
    Console.ReadKey();
}

QuickFixのものはdllからのものです。

編集: CorFlagsでdllをチェックし、計算しました

CLR Header: 2.5
PE        : PE32
CorFlags  : 16

これは、dllがi386環境でのみロードできる混合モードアセンブリであることを意味します(http://blogs.msdn.com/b/slessard/archive/2010/04/09/types-of-managed-code -assemblies.aspx

これを64ビット環境でロードすることは可能ですか?

4

2 に答える 2

2

64ビット環境で32ビットアプリケーションを実行することもできます。ただし、32ビットDLLをロードする場合は、アプリケーションを32ビットDLLとしてビルドする必要があります。これを行うには、「デバッグ」モードと「リリース」モードでターゲットプラットフォームをx86に設定します。これで問題が解決するはずです。

于 2011-04-28T07:28:08.607 に答える
0

OK、それで答えはここにあります。問題は、実際には私のプロジェクトがネイティブdllをロードできなかったことではありませんでした。問題は、私のプロジェクトが問題のネイティブdllを呼び出すマネージドdllを呼び出すことでした。私のプロジェクトのターゲットプラットフォームはx68に設定されていましたが、管理されたdllは「任意のCPU」としてコンパイルされました。x68を使用した中間マネージDLLの再コンパイルは機能しました。

于 2011-04-29T08:46:10.070 に答える