2012-04-17 10 views
1

おはよう!SharedMemの理解

現在、Firemonkey/FMXを使用してさまざまな機能を備えたデスクトップインターフェイスを設計しています。これらの機能の1つは、「パネル」内に情報を表示する機能です。この「パネル」は、titleおよびcontext(両方ともtlabel)およびimagetimage)からなります。アプリケーションと対話したい "アプリケーション"ごとに1つのパネルが作成されます。各パネルには、作成するプロシージャを呼び出すときに割り当てられた変数を使用して作成された名前が付けられています。これは他の開発者がパネルに簡単にアクセスできるように設計されていますが、これが悪用される可能性があるため、bindingnameに切り替えることができます。

変数に基づいてこれらのパネルのいずれかを作成するためのコードと、ネストされた反復.childrenFindComponentループに基づいてラベルとイメージレベルに型キャストするコードを書きました。自由に変更できますこのメソッドを使用してラベルまたはテキストのテキスト(.loadfromfile)を使用します(つまり、コードが動作します)。しかし、私はこの機能を他のアプリケーションや開発者に公開して、実際にこれらの「パネル」の中に情報を表示したいので、私は共有メモリで作業する必要があります。

問題は私が本当に理解できないことです。私が読んだことは、SharedMemを使うのは簡単だが、私はそれを全く理解できないことを意味する。 XE2のサンプルに含まれる簡単な例でさえ、私を混乱させます。残念なことに、IPCを理解するために何度も試したにもかかわらず、IPCを全く理解していません。私はinifilesを使うことができましたが、私は彼らに柔軟性が要求されるとは感じません。私はGlobalAtomTableと考えていましたが、SharedMemの場合と同様、どちらも理解できません。デルファイで漏洩しているとは言えません。

私は最初に共有メモリの領域を作成する関数/プロシージャを探しています。私は実際にその共有メモリから文字列を読み込んで、resultを出力して他のプロシージャや関数を介してアクセスする関数を探しています。私は私の他のプロジェクトをこれと互換性を持たせたいので、別のアプリケーションから共有メモリに値を書き込むための手続き/関数を得ることも考えています。

私が言ったように、私はIPCやSharedMemを理解していないので、より高度なレベルまで自分が仕事をして教えることができる基本的な出発点が本当に必要です。私が学ばれることを望んでいるものにステップバイステップのウォークスルーが大いに評価されます。私は、これまでIPCと協力していたはずのものだから、ちょっとしたコードを書くのではなく、これを学びたいと思っています。

+0

共有メモリは答えではありません。あなたは同期する必要があります。それはあなたのニーズにはあまりにも低レベルです。 TCP/IPの上に構築されたものは、より賢明に聞こえ、クロスプラットフォームに簡単になります。また、リモートマシンに容易に拡張できます。 –

+1

@ken私はSharedMemで考えるScottはCreateFileMappingのように共有メモリを意味します。 –

+0

@David、そうです。読み込みが速すぎる(「SharedMem」ではなく「ShareMem」を見た)、読み込みが遅すぎる。 :)コメントを削除します。 –

答えて

4

Cromis IMC or IPC componentsをご覧ください。

IMCは、tcp(indy)を使用したマシン間通信用で、IPCは、名前付きパイプを使用したプロセス間通信用です。

どちらも同じクライアント/サーバーメッセージシステム(パケットベース)を使用しているため、アプリケーションを実装するためにWindowsのドキュメントを読める必要はありません。

上記のリンクにある例に従うだけで、アプリケーションをすぐに実行できます。 Btw、作者Iztok KacinはSOメンバーです。

+0

これはおそらくコードと実験で作業できるので、おそらく最良の例です(そしてそれは私が探していたので、受け入れます)。 Cromisライブラリ全体(OverbyteICSが必要なため、Indyが言及されたために私を混乱させてしまった)をダウンロードしたときの最初の問題がありましたが、それはただちにIPCパッケージで解決されました。 このメソッドが標準であるかどうか、また、そのような実装を使用する場合、Delphi以外の他の開発者が最初に記述した方法で私のアプリケーションを使用できるかどうかが問題です。 –

+1

私は、クライアント/サーバー間でテキスト文字列を送ります。そうすれば、Com/DCom/Ipc/Tcp/Http層に同じトランスポートを使用できます。テキスト文字列はxmlデータ(またはini-fileデータ)として構造化することができるため、トランスポートは非​​常に一般的であり、プロトコルインタフェース部分を簡単に記述することができます。他の解決策には、 'DataSnap'、' XML-RPC'、 'JSON'があります。私は少し実験をすることをお勧めします、プロトコルをできるだけトランスポートから独立させてください。あなたが満足したら、私が言及した選択肢を見て、賛否両論について別の質問をしてください。 –

+0

こんにちは、私のIPCとIMCは、高水準の抽象化を使用して、開発者からの実装の詳細をLU RDのように隠しています。カスタムプロトコルのために、サーバー側とクライアント側のコンポーネントが通信する必要があります。別のソリューションのためのよりオープンな外観を必要とする場合。 IMCはTCPとIndyを使用し、IPCは名前付きパイプを使用します。しかしどちらも、カスタムプロトコルを持っているので、データパケットを最適な方法で送信できます。 – Runner