3

32 ビットのネイティブ dll である古いサードパーティ コンポーネントがあります。COM ベースのアプリでは、Windows API を介してリンクします。現在、アプリを .Net にアップグレードし、64 ビット システムで実行することを計画しています。私の質問: 古い 32 ビット ネイティブ DLL を、Windows API を介して 64 ビット .net アプリにリンクすることはできますか? そうでない場合、それを機能させる方法についてのアイデアはありますか?

4

2 に答える 2

5

32 ビット コードは、64 ビット プロセス内では使用できません。ただし、32 ビット アウトプロセス COM サーバー内で 32 ビット DLL をラップできます (DLL が既に COM サーバーである場合は、COM DllSurrogateを使用してプロキシできます)。プロセス (.NET またはその他) は、必要に応じてその COM サーバーを使用できます。それ以外の場合は、.NET プロジェクトを 64 ビットではなく 32 ビットに設定する必要があります。WOW64 エミュレータ コンポーネントがインストールされていれば、64 ビット マシンでも実行できます。

于 2013-09-10T17:54:32.923 に答える
2

簡単な回答 32 ビットと 64 ビットを一緒にリンクできないため、リンクできません

通信はできますが、32 ビットと 64 ビットの 2 つの実行可能ファイルが必要
です 次に、プロセス間通信を検索する必要があります。

メッセージ通信に行く場合、64ビットとして32の間で送信できるのは1つだけであり、WM_COPYDATAブロックされる可能性があるため、 を使用して通過させるUIPI必要がある場合があります. これは機能しますが、32 と 64 のシステム間で行いたいすべての呼び出しをカプセル化する必要があります。ChangeWindowMessageFilter

于 2013-09-10T16:50:44.020 に答える