6

相互に通信する (データを交換し、アクションを開始する) ために、いくつかの関連アプリケーションが必要です。要件はパッケージなしでソケットなしです。したがって、名前付きパイプ、WM_CopyData (Skype のように)、およびコマンド パラメーターが残ると思います。ベストプラクティスは何ですか?

4

8 に答える 8

5

おそらくいくつかのオプションがあります。

既存のものを超えて:
DDE
メモリ マップ ファイル (MMF)
メールスロット

私はおそらくPipesかMMFのどちらかを選ぶでしょう。

ダウンロードできる無料の MMF コンポーネントがいくつかあります。Deborah Pate には、使用できる一連のフリーウェア クラスがあります。 MapFiles.zip

Torry のサイトで MailSlots を確認してください。

最終的な解決策は、選択するオプションを決定するデータ転送の量、サイズ、および頻度に依存する場合があります。

于 2009-05-25T14:02:58.630 に答える
4

このような状況では、COM を使用することをお勧めします。(注意: COM+、ActiveX、OLE ではなく、COM、単なる COM です。)

Delphi 7(またはそれ以前のバージョンかどうかはわかりません)以降、プロジェクトにタイプ ライブラリとオートメーション オブジェクトを追加することで、これを簡単に行うことができます。

利点は、Delphi 内 (Type Library Editor には必要なものがすべて揃っており、コードを更新し、COM 内部と登録は ComServ ユニットから提供されます) と Delphi の外部 (私は多くのアプリケーションで使用しています) の両方で、かなり広くサポートされていることです。 C++ プロジェクト、VBA を使用した Word および Excel ドキュメント、oldskool ASP など、あらゆる種類のアプリケーションと対話するためのプロジェクト。

私が遭遇した唯一の欠点は、スレッド化の問題である可能性があります。通常のアプリケーションでは、アプリケーションの起動時にプレーンCoInitialize(nil);で済みますが、より複雑なアプリケーションでは、「スレッドアパートメント」について考えるか、フリースレッドを使用して独自のロックを行う必要があります。(場合によっては、すでに行っています。)

于 2009-05-25T14:13:28.920 に答える
2

単純なファイルを使用できます。一方が書き込み、もう一方が読み取ります。双方向通信が必要な場合は、各方向に 1 つずつ、2 つのファイルを使用するだけです。

もちろん、これは本当に高性能ではありません。

于 2009-05-25T19:22:07.510 に答える
2

実装が簡単な別の代替手段は、データベースを使用して情報を渡すことです。

あまり洗練されておらず、多くのオーバーヘッドを使用しますが、アプリケーションが既にデータベースを認識している (つまり、その一部としてデータベースを持っている) 場合、1 つまたは 2 つのテーブルを使用して情報を渡すのは非常に簡単です。

于 2009-05-25T15:18:59.053 に答える
0

データを渡したり、関数を呼び出したりする場合は、COM を使用します。ただし、呼び出しが多い場合は、COM が遅いことに注意してください。また、アプリケーションを機能させるには、「xxx.exe /Regserver」でアプリケーションを登録する必要がある場合があります。

于 2009-05-28T15:31:03.373 に答える
0

COM を使用しないでください。オーバーヘッドが多すぎます (バリアント)。.dll または .exe を登録する必要があります (そして、多くの奇妙なインストール + 更新の問題が発生します)。

Windows サービスとの通信にこれを使用します。これには、次の TGpMessageQueueReader とライターを使用します: http://17slon.com/gp/gp/gpsync.htm

于 2009-05-25T14:39:55.607 に答える
-1

これはRemObjectsが得意な種類ではありませんか?ブライ

于 2009-05-26T08:31:54.650 に答える