2011-02-10 13 views
2

私はCOMクラスを持っています。私自身のプロセス以外でもアクセスできます。各プロセスは、それ自身のクラスのインスタンスを作成します。それはCreateInstance()それはすべてのプロセスの間で共有されているCOMオブジェクトを持つ方法はありますか?ATL COMクラスの単一インスタンス

COMシングルトンだけが思い浮かぶのです。しかし、私はこれを使った経験はありません。

答えて

2

私が継承したコードベースは、COMプロジェクトで静的な '実装'インスタンスを宣言することでこれを実現します。

COMクラスは、そのインスタンスへのインターフェイスを提供するだけです。このように、COMクラスの複数のインスタンスは、COMサーバー内のシングルトン実装オブジェクトへのアクセスを効果的に提供します。

これにはしばしば同期構造が必要であることに注意してください。

+0

CreateInstance(...、CLSCTX_SERVER、...)は同じことを行いますか?基本的にインスタンスはサーバー側にあり、クライアントはそのインスタンスにのみ接続します。 – MarkP

+0

DLL内にある場合、それは失敗しません。 CLSCTX_SERVERは、スタンドアロンのEXEサーバーが存在し、プロセスとして実行できることを意味します。 COM +はあなたの友人です。 –

+0

DECLARE_CLASSFACTORY_SINGLETONは答えですか? C++コードとクライアントJScriptコードの間に1つのインスタンスを置くことができますか? – MarkP

0

アウトオブプロセスサーバーのCOMシングルトン。サーバーが既にDLLに実装されている場合は、COM +を使用してアウトオブプロセスとして構成することを検討してください。このようにして、あなたは両方の世界のベストを得るでしょう。

+0

私はCOMオブジェクトでEXEを定義しています。オブジェクトをインスタンス化する(または既に存在する場合はその参照を取得する)JScriptがあります。私のEXEでは、similargeコード(C++)は既存のオブジェクトへの参照を作成するか、または参照を取得します。 – MarkP

+0

オブジェクトはすでにシングルトンですか? –

関連する問題