是否有一种强制方法可以强制执行只能在任何时候创建一个COM对象实例(由进程内服务器提供服务)?
目前我正在TMyObjectImpl的构造函数中创建Windows Mutex;如果互斥锁已经存在,那么我设置一个标志将我的对象置于“死”状态:当设置此标志时,接口函数的所有实现都将返回错误代码。
我想抛出一个异常,而不是像这样创建一个“死”对象,但是在COM边界上抛出C ++异常并不好,我不确定COM的C ++ Builder实现是否可以可靠地应对这一点。
实际上有两种可能的问题场景:
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
。
我的对象需要此属性,因为它访问全局资源(例如,写入特定磁盘位置中的文件);对象的语义是这样的,一次只能打开一个。我不打算添加对我的对象的多个实例的支持。