2

アプリケーション モジュールであるいくつかのクラス ライブラリを含む Windows フォーム アプリケーション用の Visual Studio ソリューションがあります。私のアプリケーションは「任意の CPU」で実行され、64 ビットの dll 参照を大量に使用するため、「x86」に変更できません。

アプリ モジュールの 1 つで使用する必要があるネイティブ C++ 32 ビット dllがありますが、それはまったく不可能であり、ラッパーを使用したくないため、最も簡単なのはセルフ ホスト WCF サービスを使用することであると読みました。

私が考えていたアプローチは、ソリューション内でネイティブ C++ 32 ビット dll を参照し、WCF サービスをホストするコンソール アプリケーション (32 ビット) プロジェクトを作成することです。ユーザーがアプリ モジュールを開くと、Process.Start(自己ホスト型の wcf コンソール app.exe)を呼び出すので、WCF サービスが開始され、Windows フォーム アプリケーションからメソッドなどにアクセスできます。その後、ネイティブ 32 ビット dll を使用できるようになります。メソッド。

これはアウトプロセスアプリケーションとして知られていると思います。

これを行うためのより良い方法があると思う人はいますか?.EXE アプリ (メイン アプリの exe と自己ホスト型の wcf.exe) が必要なのが本当に好きではありません。メインの app.exe 64 ビット プロジェクト内に自己ホスト型の wcf 32 ビット プロジェクトを配置できますか? 可能であれば、どのように呼び出すことができますか?

前もって感謝します

4

1 に答える 1

2

私は自分のプロジェクトでそれを行いました。プロジェクトに _x64 または _x86 という名前を付けました。ビルド設定を変更するだけで、両方のプロジェクトを同じソリューションに含めることができます。これをプロセス分離と名付けました。
次のことを確認してください。

  • 親プロセスが終了するとどうなるか
  • 子プロセスが終了するとどうなるか
  • 親プロセスが子プロセスが生きていることを認識するのはいつですか - wcf の使用を開始します。
  • x86 の呼び出しを非同期にする必要がありますか? 次に、適切な非同期パターンを使用します

私の質問からこれらの答えを得ることができます:

子プロセス WCF サービスが開始されたことを確認します: C# .net 3.5 プロセス間通信 子プロセスが正常に開始されたことを確認します

ホストされたプロセスを閉じる: ホストされたプロセスを閉じる最良の方法

プロジェクト参照の回避策:プロジェクト参照の回避策 .net 4.5 および .net 3.5

于 2013-05-12T19:02:20.180 に答える