2012-05-30 26 views
6

Windowsでは32ビットプロセスで64ビットdllを読み込むことはできないため、32ビットプロセスが64ビットプロセスと対話できるようにするためにremotingを使用しようとしています。32ビットプロセスは.NETの64ビットプロセスとどのように通信できますか?

2つのアプリケーションが同じマシンに置かれているうちに、1つは32ビットでもう1つは64ビットです。そのようにする必要があります.32ビットまたは64ビットの両方を作成すると、の上に構築されています。

私は.NETのSystem.Runtime.Remoting.RemotingConfigurationクラスを使用していて、そのConfigure()メソッドを呼び出して、リモート処理を介してアクセスするMarshalByRefObjectクラスを参照するApp.configファイルへの参照を渡しています。

クライアント、ホスト、MarshalByRefObjectクラスの長さが32ビットまたは64ビットの場合に限り、問題なく動作します。私がそれらを混ぜると、これはうまくいかないでしょう:私はBadImageFormatExceptionで終わるでしょう:

ファイルまたはアセンブリ 'MyRemotingObject'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

両方のアプリケーションを32ビットまたは64ビットのいずれかにすると例外がなくなりますが、もう1つは32ビットともう1つの64ビットでなければなりません。

32ビット.NETアプリケーションと.64ビット.NETアプリケーションの間でプロセス間通信を有効にする方法を教えてもらえますか?

+0

リモートはここにあなたの友人ではありません。より単純なものを使用してください。おそらく、基本的なソケットサーバーでしょう。 –

+0

それらをすべて32ビットまたは64ビットにしてみませんか?これら2つを混ぜるのは何ですか? –

答えて

8

ランダム推測:.NETリモートは、メタデータのホールドを取得するには、両方のプロセスにアセンブリをロードする必要があります。データ契約(WCF用語を使用する)は別のアセンブリにする必要があり、いずれのプロセスにもロードできるように、「AnyCPU」としてコンパイルする必要があります。明示的に32ビットまたは64ビットに設定されています。

+0

あなたは正しいです!ホストを64ビットに設定すると、クライアントは32ビットに、データ契約はどのCPUにも問題を解決します。ありがとうございました! –

+2

あなたは答えを受け入れるべきです、そして... ;-) –

関連する問題