相互に通信する (データを交換し、アクションを開始する) ために、いくつかの関連アプリケーションが必要です。要件はパッケージなしでソケットなしです。したがって、名前付きパイプ、WM_CopyData (Skype のように)、およびコマンド パラメーターが残ると思います。ベストプラクティスは何ですか?
8 に答える
おそらくいくつかのオプションがあります。
既存のものを超えて:
DDE
メモリ マップ ファイル (MMF)
メールスロット
私はおそらくPipesかMMFのどちらかを選ぶでしょう。
ダウンロードできる無料の MMF コンポーネントがいくつかあります。Deborah Pate には、使用できる一連のフリーウェア クラスがあります。 MapFiles.zip
Torry のサイトで MailSlots を確認してください。
最終的な解決策は、選択するオプションを決定するデータ転送の量、サイズ、および頻度に依存する場合があります。
このような状況では、COM を使用することをお勧めします。(注意: COM+、ActiveX、OLE ではなく、COM、単なる COM です。)
Delphi 7(またはそれ以前のバージョンかどうかはわかりません)以降、プロジェクトにタイプ ライブラリとオートメーション オブジェクトを追加することで、これを簡単に行うことができます。
利点は、Delphi 内 (Type Library Editor には必要なものがすべて揃っており、コードを更新し、COM 内部と登録は ComServ ユニットから提供されます) と Delphi の外部 (私は多くのアプリケーションで使用しています) の両方で、かなり広くサポートされていることです。 C++ プロジェクト、VBA を使用した Word および Excel ドキュメント、oldskool ASP など、あらゆる種類のアプリケーションと対話するためのプロジェクト。
私が遭遇した唯一の欠点は、スレッド化の問題である可能性があります。通常のアプリケーションでは、アプリケーションの起動時にプレーンCoInitialize(nil);
で済みますが、より複雑なアプリケーションでは、「スレッドアパートメント」について考えるか、フリースレッドを使用して独自のロックを行う必要があります。(場合によっては、すでに行っています。)
単純なファイルを使用できます。一方が書き込み、もう一方が読み取ります。双方向通信が必要な場合は、各方向に 1 つずつ、2 つのファイルを使用するだけです。
もちろん、これは本当に高性能ではありません。
実装が簡単な別の代替手段は、データベースを使用して情報を渡すことです。
あまり洗練されておらず、多くのオーバーヘッドを使用しますが、アプリケーションが既にデータベースを認識している (つまり、その一部としてデータベースを持っている) 場合、1 つまたは 2 つのテーブルを使用して情報を渡すのは非常に簡単です。
データを渡したり、関数を呼び出したりする場合は、COM を使用します。ただし、呼び出しが多い場合は、COM が遅いことに注意してください。また、アプリケーションを機能させるには、「xxx.exe /Regserver」でアプリケーションを登録する必要がある場合があります。
COM を使用しないでください。オーバーヘッドが多すぎます (バリアント)。.dll または .exe を登録する必要があります (そして、多くの奇妙なインストール + 更新の問題が発生します)。
Windows サービスとの通信にこれを使用します。これには、次の TGpMessageQueueReader とライターを使用します: http://17slon.com/gp/gp/gpsync.htm
これはRemObjectsが得意な種類ではありませんか?ブライ