2

「任意のCPU」としてビルドするように設定されたアセンブリUtilsがあり、「任意のCPU」としてもビルドするように設定されたマネージドEXEがあります。exeは私のUtilsアセンブリを使用します。

私のUtilsアセンブリは、管理されていない非com 32ビットDLLをロードし、いくつかの関数を呼び出す必要があります。

毎回「間違った形式のプログラムを読み込もうとしました。」という例外が発生します。

EXEとアセンブリを64ビットモードで実行しながら、32ビットDLLをロードして簡単な関数呼び出しを行う方法はありますか?

EXEを32ビットモードでビルドすると機能することはわかっていますが、Utilsアセンブリは64ビットモードで実行される可能性のあるWCF Webサービスやその他のプログラムで使用され、32ビットdllを呼び出す必要があります。

方法はありますか?64ビットコードから呼び出されたときに0ポインターを返すLoadLibraryと、例外を与えるDllImportを使用してみました。

ご協力ありがとうございました。

4

3 に答える 3

4

いいえ、それは不可能です。DLLを64ビットにアップグレードできない場合は、32ビットプロセスでDLLをホストし、.NETプロセス間通信メカニズムの1つを使用して使用するなど、必死に行う必要があります。WCFのように。

于 2011-03-31T17:40:40.577 に答える
2

プロセスまたはアセンブリを他のプロセスまたはアセンブリに一致するように変更できない、または変更しない場合は、いいえ、やりたいことを簡単に行う方法はありません。

64ビットプロセスから32ビットアセンブリと対話する、またはその逆の唯一の方法は、アセンブリを別のプロセスにロードし、プロセス間呼び出しを使用してそれと通信することです。

コードは2つのケース間で基本的に互換性がないため、実際には方法がありません。

また:

  1. プログラム、およびそのアセンブリと対話する必要のある他のすべてのプロセスを32ビットに変更します
  2. アセンブリを任意のCPUに変更します
  3. シムプロセスと、WCFなどのIRPCを使用します
于 2011-03-31T17:41:39.790 に答える
0

いいえ、すべて同じでなければなりません。

于 2011-03-31T17:40:09.853 に答える