0

デザインアプローチについての質問です。COM の経験は限られており、WCF の経験も少しあります。私の制約はアプリケーション環境によって与えられますが、設計にはある程度の柔軟性があります。

VB6 dll 内から、WPF アプリケーションを起動して通信する必要があります。WPF アプリケーションは現在 exe ですが、それが役に立ったらライブラリにすることもできます。VB6 dll と WPF アプリケーション間の双方向通信を提供したいと考えています。VB6 dll の設計を柔軟に調整できます。

VS2010 と .NET 4 を使用して C# を開発しています。

いくつのコンポーネントを使用する必要がありますか? VB6 dll を使用して In-Proc で WPF アプリケーションを開始できますか? それらの間に 3 番目のコンポーネントが必要ですか? COM+ は有用な役割を果たすことができますか? WPF アプリケーション全体を COM 可視にする必要がありますか? これを行うことのマイナス面はありますか?

プロトタイプを作成できる設計アプローチを探しています。詳細を調査したいと思います。

4

3 に答える 3

1

Out of the options available I like the COM option more than the 'start another process' option for the simplicity that the inter 'application' communication will be via method calls rather than WCF or anything similar.

I am assuming that your VB DLL lives in a window'd process and not a service or web application. You would only need to mark any exposed types as COM visible, that is the classes, their argument and return types.

You may have to wrap your WPF UI inside the windows forms ElementHost [1] but I'm not sure, try it and see.

I'm not sure if you saw this [2] in your search, it sounds do-able but unsupported, ok as long as you don't have too much going on.

[1] http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.elementhost.aspx

[2] http://social.msdn.microsoft.com/forums/en-US/wpf/thread/7555ba6a-1359-4dfe-aa23-c31a8f121142/

于 2012-08-13T22:07:14.900 に答える
1

私は主にVB6で記述されたアプリケーションに取り組んでいますが、最近のコードのほとんどは、WPFといくつかのWinFormsで構築されたUIコンポーネントを使用して.netで記述されています。このアプリケーションのデータソースは、WCF、MSSQLサーバー、および独自のUNIXベースのサーバーです。すべてのWCF呼び出しは、.netUIコンポーネントによって参照されるデータアクセスコンポーネントから行われます。

WPFは、VB6ウィンドウまたはその他のコンテナーコントロールでホストできます。まず、 Interop Forms Toolkitを入手し、WPFコントロールをホストするためのシェルユーザーコントロールを作成します。

これらのコントロールでWPFをホストできるようにするには、ElementHostを含むWinFormsユーザーコントロールを構築する必要があります。これにより、コンテンツをWPFユーザーコントロールに設定できます。

VB6ユーザーコントロールまたはウィンドウ内の WinFormsユーザーコントロール
内の
要素ホスト
内のWPFユーザーコントロール



相互運用ツールキットはVB.Netコードをビルドしたいと思うでしょうが、私はこれを試していませんが、C#でそれを行うことができます。相互運用ツールキットによって作成されたユーザーコントロールはCOMコンポーネントとして公開され、プロジェクト>コンポーネントを介してコンポーネントとして追加することでVB6を参照でき、ツールボックスに表示されます。

データソース(WCF、データベース)などに関しては、UIコンポーネントから直接参照される.netコンポーネントですべてのデータアクセスを構築する必要があります。VB6ライブラリにコールバックしようとしないでください。おそらく混乱を招くだけです。

私のアプリケーションには、すべての.netコンポーネント用のIoCコンテナーをセットアップするVB6アプリケーションのスタートアップから呼び出す構成セクションもあります。

ベストプラクティスのアプローチから、実際にはVB6コードを.netに書き直して、VB6を画像から除外することをお勧めします。これがオプションでない場合は、いくつかのオプションがあります。私の説明はそのうちの1つにすぎません。

于 2012-08-13T22:58:10.843 に答える
1

私は...するだろう

  1. WCF を使用して、WPF アプリケーションから Web サービスを作成します。リモートでアクセスする必要がある WPF アプリケーションの側面を抽象化します。これには、明示的にユーザー インターフェイス コードが含まれません。
  2. 簡単なクラス ライブラリ プロジェクトを作成し、[サービス参照の追加] を使用して WCF サービスへの参照を追加します。
  3. クラス ライブラリのメソッドを COM から参照できるようにします。
  4. これらのメソッドをVB6から呼び出します

これには、方程式からユーザー インターフェイスの考慮事項を取り除くという利点があります。

于 2012-08-13T22:29:40.557 に答える