2012-02-25 54 views
2

.netアプリケーションを互いに直接通信する方法を説明した記事がありました(http://ryanfarley.com/blog/archive/2004/05/10/605.aspx)しかし、それは私の明らかにvb6で行うことはできませんあなたのフォームでWndProcメソッドをオーバーライドが含まれます。.netとvb6との間のアプリケーション通信

vb6で利用できる他のアプリケーション間通信の方法はありますか?

私は新しいプロジェクトを.netで開始しようとしていますが、vb6形式があります。必要なときにすぐに移植することはできません。私はいくつかの異なるデザインを検討した後、vb6アプリをバックグラウンドで実行させるのが最善であると判断し、そうするよう通知されたら必要なフォームを提示してから.netアプリケーションに通知することができますフォームが閉じられたとき。

+0

また、余分な依存関係を必要としないものが好きです...たとえば、私がそれを避けることができれば、msmqなどの設定をしたくないと思います。 –

+2

VB6では、ウィンドウprocをオーバーライドすることは可能ですが、サブクラス化を見てください。 – Deanna

+0

@Deanna、それに感謝します。私は本当に偉大なコードを見つけました。私が望むだけのパイプを使っていましたが、これが必要な場合に備えて、これを覚えています。 –

答えて

4

多くの選択肢があります。あなたの要件についてもっと言えば、私はより詳細な答えを提供することができます。平均時間で

は、名前付きパイプを見て:

http://msdn.microsoft.com/en-us/library/bb546085.aspx

彼らは、次のとおりです。あなたのプログラムが異なるサーバー上に存在する場合は

http://support.microsoft.com/kb/871044

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85).aspx

特定のプロセスを必要としない、プロセス間通信の信頼できる方法OSのセットアップは、.NETとVB6の両方で利用できます。

+0

ありがとうございます。私は自分の投稿で何を達成しようとしているかについていくつかの情報を追加しました。 –

+0

名前付きパイプでそれを達成できるはずです。双方向のパイプを使ってVB6に「フォームXを表示」と「フォームXで完了」というメッセージを.NETに送り返してください。 –

+0

これは良い方法のようです。私はあなたが投稿した最初のリンクの例に従っていますが、C#で書いています。私が確信していないことの1つは、C#でH80Sのような16進値を表現する方法です。私はC#であなたに接頭辞 '0x'を付けることを知っていますが、その末尾にあるSがすべてについて知っていますか? –

1

VB6 EXEをActiveX EXE(COMサーバー)にして、.NetコンポーネントでCOM相互運用機能経由で呼び出すことができます。私。ちょうどadd a referenceをプロジェクト参照ダイアログのCOMタブのVB6 EXEに送ります。

また、WCFを使用することもできます。 VB6が参加できるように、WCF通信用のラッパーとして動作するように、.NETでCOMで表示されるDLLを作成します。あなたは名前付きパイプを使用することができます:VB6が呼び出すことができるようにCOM-visible DLLに内蔵の.Net supportを使用することをお勧めします。

免責事項:私は実際にこれを試したことはありませんが、実際にはVB6から名前付きパイプAPIにアクセスするよりも簡単なはずです。

+0

ありがとう提案。私は名前付きパイプのソリューションがかなり良く見えていると思います。そして、ええ、.netから名前付きパイプのラッパーを作成することは、vb6からAPIを使用しようとするよりも簡単になります。 –

関連する問題