COM オブジェクト (インプロセス サーバーによって提供される) のインスタンスを一度に 1 つしか作成できないようにする良い方法はありますか?
現在、TMyObjectImpl のコンストラクターで Windows Mutex を作成しています。ミューテックスが既に存在する場合は、オブジェクトを「デッド」状態にするフラグを設定します。このフラグが設定されると、インターフェイス関数のすべての実装がエラー コードを返します。
このような「デッド」オブジェクトを作成する代わりに例外をスローしたいのですが、COM 境界を越えて C++ 例外をスローするのは良くありません。COM の C++Builder 実装がこれに対処できるかどうかはわかりません。確実に。
実際には、次の 2 つの問題のシナリオが考えられます。
- 同じプロセスで 2 つの MyObject が作成されます
- 2 つの異なるプロセスがそれぞれ 1 つの MyObject を作成します
Mutex はこれらの両方を防ぎます。
私のオブジェクトファクトリ関数は次のとおりです。
static void createFactory()
{
new TCppAutoObjectFactory<TMyObjectImpl>(Comserv::GetComServer(),
__classid(TMyObjectImpl),
CLSID_MyObject,
Comobj::ciMultiInstance,
Comobj::tmSingle);
}
#pragma startup createFactory 32
C++Builder DocWiki によると、Instancing プロパティを設定してもインプロセス サーバーには影響しませciMultiInstance
んciSingleInstance
。
オブジェクトはグローバル リソースにアクセスするため (たとえば、特定のディスクの場所にあるファイルへの書き込み)、このプロパティが必要です。オブジェクトのセマンティクスは、一度に 1 つしか開かれないようになっています。オブジェクトの複数のインスタンスのサポートを追加するつもりはありません。