1

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 プロパティを設定してもインプロセス サーバーには影響しませciMultiInstanceciSingleInstance

オブジェクトはグローバル リソースにアクセスするため (たとえば、特定のディスクの場所にあるファイルへの書き込み)、このプロパティが必要です。オブジェクトのセマンティクスは、一度に 1 つしか開かれないようになっています。オブジェクトの複数のインスタンスのサポートを追加するつもりはありません。

4

0 に答える 0