『求教』GetActiveObject的问题,请高手进内看详细过程
问题表现如下:
源端,CreateInstance建立一个CHandler COM对象实例, 并调用CHandler RegisterActiveObject()(hr = RegisterActiveObject( spUnk, clsid, ACTIVEOBJECT_WEAK, &m_dwRegister );)
客户端:调用ObtainObjectFirstTime
CXXX::ObtainObjectFirstTime()
『
for (int i=0; i<20; i++)
{
if ( ObtainObjectFromROT() )
break;
Sleep( 100 );
}
』
BOOL CXXX::ObtainObjectFromROT()
『
。。。。。
hr = GetActiveObject( clsid, NULL, &spUnk );
if ( SUCCEEDED(hr) )
m_spHandler = (IHandlerPtr)spUnk;
。。。。。。
return (NULL != m_spHandler);
』
目前相关程序就这些,
目前出现的情况是
通过VC工具ROT view可以看到active object是存在的,
但是客户端获取active object失败,失败的情况是这样,循环开始的第一次,hr = GetActiveObject( clsid, NULL, &spUnk );是成功的,但spUnk为空,之后则hr = GetActiveObject( clsid, NULL, &spUnk );失败
,如果还没有详细说明的,我在线等候高手指点!
ps:关于CHandler COM对象的注册我是通过安装文件写到注册表里的,如果我手动调regsvr32 handler。dll注册一次则以上所述过程为成功的,但我不可能每次让用户手动注册,