2012-01-29 15 views
3

私は64ビットで動作するアプリケーション用のアドインを作成していますが、32ビットライブラリのオブジェクトを使用する必要があります(このライブラリは32ビットのみで提供されます)。私はこれを達成できる方法はありますか?64ビットC#アプリケーションで32ビットライブラリを使用する方法はありますか?

+3

私はあなたが32ビットプロセスで32ビットライブラリをホストし、プロセス間通信を使用して前後のデータをマーシャリングできると信じています。短い答え:それは容易ではありません。 – user7116

+2

*本当に* 64ビットモードが必要ですか?まれです。単純な修正は、EXEプロジェクトのPlatformターゲットをx86に設定することです。 –

+2

@Hans Rickのようなサウンドは、アドインを書いているため、ホストアプリケーションを制御できません –

答えて

8

これは.NETでは非常に簡単です。同じビット幅にするには、プロセス内のすべてのモジュールが必要です。

子プロセスの32bitプロセスを開始し、32bit DLLをすべてそこに置いて、.netのリモート機能を使ってプロシージャを呼び出します。または、COM-timesで言うように:アウトプロセスのコンポーネントサーバーを使用します。

32ビットと64ビットのモジュール間で大量のデータを渡す必要がある場合は、さらに複雑になります。メモリ共有を設定できますが、通常よりも多くの作業が必要です。

7

ここのルールは簡単ですが、聞きたいものではありません。 1つのプロセス内のすべてのコードは、ビット幅がのでなければなりません。ホスティングプロセスが64ビットの場合、そのプロセス内のすべてのコードも64ビットでなければなりません。したがって、32ビットコードを実行する必要がある場合は、32ビットコードを別のプロセスに入れて、何らかの形式のIPCを使用する必要があります。

関連する問題