求教:LPDISPATCH的运行时类型识别

amorg 2004-10-26 03:29:29
有一个com组件的函数返回一个lpdispatch 指针,这个lpdispatch指针可能是CA类型,也可能是CB类型(CA,CB是另两个com接口的自动化包装类),怎么得到这个lpdispatch的具体类型,好分别赋给CA或CB类型的变量,请高手指点。
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
XXandOO 2004-10-28
  • 打赏
  • 举报
回复
即使在C++里用,纯dispinterface也是不能直接使用QI的,双接口才可以,纯dispinterface要使用ITypeInfo。
  • 打赏
  • 举报
回复
QI啊.
aspnetwuxueyou 2004-10-27
  • 打赏
  • 举报
回复
在哪里调用的组件?
如果是在c++中,用RTTI就可以。
如果是在脚本中想确定类型,得用ITypeInfo
  • 打赏
  • 举报
回复
如果不是你的IID有问题(你的参数怎么看起来像个CLSID啊),就应该是 lp 不支持该接口.
amorg 2004-10-27
  • 打赏
  • 举报
回复
c++的typeid得不到具体类型,只能得到类型名struct IDispatch*。因为在函数内部肯定是转化为lpdispatch才传出来的,得到这个结果我认为是正常的

QueryInterface是个好方法,我就是这么做的,可是居然查询不到这个借口

LPDISPATCH lp = a.GetSomeObject();
LPVOID pObject;
HRESULT hr=lp.QueryInterface(IID_SomeInterfaceCLSID,(void**)&pObject);
得到的hr说没有这么接口,可是这个clsid明显在注册表里有的,很伤脑筋啊

3,245

社区成员

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

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