仅允许单个COM对象实例

时间:2014-06-18 02:17:52

标签: com c++builder c++builder-xe5

是否有一种强制方法可以强制执行只能在任何时候创建一个COM对象实例(由进程内服务器提供服务)?

目前我正在TMyObjectImpl的构造函数中创建Windows Mutex;如果互斥锁已经存在,那么我设置一个标志将我的对象置于“死”状态:当设置此标志时,接口函数的所有实现都将返回错误代码。

我想抛出一个异常,而不是像这样创建一个“死”对象,但是在COM边界上抛出C ++异常并不好,我不确定COM的C ++ Builder实现是否可以可靠地应对这一点。

实际上有两种可能的问题场景:

  • 同一过程会创建两个MyObject
  • 两个不同的进程分别创建一个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

我的对象需要此属性,因为它访问全局资源(例如,写入特定磁盘位置中的文件);对象的语义是这样的,一次只能打开一个。我不打算添加对我的对象的多个实例的支持。

0 个答案:

没有答案