『求教』GetActiveObject的问题,请高手进内看详细过程

asura_hzk 2005-12-13 11:56:33
问题表现如下:
源端,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注册一次则以上所述过程为成功的,但我不可能每次让用户手动注册,

...全文
294 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
asura_hzk 2005-12-14
  • 打赏
  • 举报
回复
更正一下以上描叙:

。。。循环开始的第一次,hr = GetActiveObject( clsid, NULL, &spUnk );是成功的,但spUnk为空,。。”
更正为:
spUnk获取正确,
但是m_spHandler = (IHandlerPtr)spUnk;m_spHandler为空,
asura_hzk 2005-12-14
  • 打赏
  • 举报
回复
高手,谁能帮我解释解释:啊
_com_ptr_t<_com_IIID<NOTEPADHANDLERLIB::IHandler,&_GUID_afdb1316_dec4_4fe5_abdb_7ec7ceb7360a>>::GetIID()
return value有两种情况的值:一种:{IID_IHANDLER}
一种为:{afdb1316_dec4_4fe5_abdb_7ec7ceb7360a}

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧