2012-01-27 22 views
4

vb6アプリと.netアプリの間でデータを渡す必要があります。このデータは毎秒書き込まれるか、または毎秒読み取られます。約30フィールドです。両方のアプリは同じマシンに存在します。私は現在、レジストリを介してこのデータを渡していますが、それは素晴らしいですが、それは私を少し緊張させます。私はテキストファイルでそれを行うだろうが、私はデータの損失が心配です。VB6アプリと.Netアプリの間でデータを渡す

これを行うにはどのような方法が最適ですか?

+2

かなり怖い。これは、レジストリが意図したものではありません。レジストリハイブの断片化について聞いたことがありますか? – Bob77

答えて

1

共通バックエンド?はい、レジストリは動作しますが、テキストファイルは動作しますが、マルチユーザー環境ではデータベース(MS AccessやSQL Serverなど)を使う方が良いでしょう。

+1

+1。おそらくSQL Serverはマルチプロセス環境で優れています。たぶん[SQL Server Compact](http://stackoverflow.com/questions/416716/would-you-use-sql-server-compact-for-a-desktop-application) – MarkJ

+1

データベースはおそらく最も高価な形式のIPCですがある。 – Bob77

+0

OK、高価です。特に、DBAを雇う必要がある場合は、レジストリやテキストファイルよりもマルチユーザーの更新が処理されます。 – Beth

2

これを簡単に実行したい場合は、情報を共有するために何らかのRPCプロセスを使用することをお勧めします。

1はおそらくXML-RPC

VB6.Netだろう最も簡単には、必要なライブラリを持って、両方のように見えます。

データの消失が心配な場合は、同じデータベースに接続することもできます。

0

メイルスロット、メモリマップファイル、名前付きパイプ、ソケット。これらのためにウェブ上にたくさんのヘルプとコードがあります。

同じマシン(両方のWindows OS)上のプロセス間の小さなメッセージ:MailSlotsを使用してください。

同じマシン上のプロセス間の大きなデータブロック:メモリマップされたファイルに移動します。

プロセス間のメッセージのストリーミング(同じまたは異なるマシン、両方のWindows OS):名前付きパイプを使用します。

プロセス間のメッセージのストリーミング(同じマシンまたは異なるマシン、同じまたは異なるOS):ソケットで実行します。


レジストリを使用しているので、代わりにメールスロットを使用している可能性があります。

+0

私は使用されたメールスロットを使用しません。良い例を教えてくれますか? – jocoder

+0

@jocoder:チェックアウトには2つの場所があります。まず、http://www.codeproject.com/Articles/19231/Fully-functional-Asynchronous-Mailslot-Control-in – rskar

+0

@jocoderのC#プロジェクト:第二に、これは誰かのVBコードであり、ほとんどは動作します。それを発行する):http://forums.devx.com/archive/index.php/t-160327.html – rskar

1

実際にメールスロットはマシン間で正常に動作します。 400バイトを超えるメッセージに対してはうまく動作しません。

DDEはまだサポートされており、かなり高速です。おそらく.NETのサポートはありません。

もちろん、単純なアウトプロセスCOMは、Windows RPCの上にある薄いレイヤーです。

+0

私もDDEについて考えました。それはVB6の日に戻って答えを返すことでした、そして、私はそこにいくつかの.NETコードがあると確信しています。 – JohnFx

+0

しかし、警告があり、R. Chenのお気に入りのものではありません。http://blogs.msdn.com/b/oldnewthing/archive/2007/02/26/1763683.aspx – Bob77

+0

@Bob:「メールスロットはマシンも " - 一般的にはそうですが、メッセージの受信は善意ではありません。 – rskar

関連する問題