我在ATL工程里建立了两个双接口的COM对象,现在我想在A对象的GetB方法中返回B对象的IDispatch接口,应该怎么操作啊?

绝缘 2007-10-27 01:51:27
我在ATL工程里建立了两个双接口的COM对象,现在我想在A对象的GetB方法中返回B对象的IDispatch接口,应该怎么操作啊?
在GetB方法中使用B *pb=new B();编译不通过.
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
绝缘 2007-10-29
  • 打赏
  • 举报
回复
看样子可以结帖了......
chnuser 2007-10-29
  • 打赏
  • 举报
回复
只要你按我的方法实现。。。
你在VB中可以这样:
1 在VB中把xx.DLL库引用到你的工程中;
2 用dim xx as xx.A;
3 dim xxx as xx.B;
4 set xxx = xx.getB();
绝缘 2007-10-29
  • 打赏
  • 举报
回复
我想让我的COM对象支持索引访问(对象默认属性),如在VB中这样调用:
Set obj=CreateObject("ATL2.Cls1")
MsgBox obj("ccc")
obj("ddd")=10

如何实现?
chnuser 2007-10-29
  • 打赏
  • 举报
回复
我在ATL工程里建立了两个双接口的COM对象,现在我想在A对象的GetB方法中返回B对象的IDispatch接口,应该怎么操作啊?

在A中爆露出B的接口有两种方法。直接爆露和间接爆露。。。

你这种是间接爆露。你只需在GetB中,使用B对象的QueryInterface方法得到IDispatch,后把IDispatch返回即可。
chnuser 2007-10-29
  • 打赏
  • 举报
回复
用queryInterface函数。使用COM接口要通过这个函数。。。。。
绝缘 2007-10-29
  • 打赏
  • 举报
回复
如果直接用new的话,内存是由客户端管理的,而不是COM.用CoCreateInstance是成功的,已经验证过了.

如果我想让我的COM对象支持索引访问(对象默认属性),如在VB中这样调用:
Set obj=CreateObject("ATL2.Cls1")
MsgBox obj("ccc")
obj("ddd")=10

各大高手都来帮帮我啊.
superdiablo 2007-10-29
  • 打赏
  • 举报
回复
我曾经想这样做过,不过感觉不方便,所以用其他方法绕过去了.你如果非得这样做可以试一下以下方法:
1. B *pb=new B; 然后返回(IUNKNOWN *)pb
2. 像楼上说的,用CoCreateInstance创建一个instance,然后返回.
不过没有验证过.
我说的绕过去的方法是让客户去创建,而不是COM创建.
绝缘 2007-10-29
  • 打赏
  • 举报
回复
谢谢yawer,用CoCreateInstance是正确的.还有一个问题啊

如果我想让我的COM对象支持索引访问,如在VB中这样调用:
Set obj=CreateObject("ATL2.Cls1")
MsgBox obj("ccc")
obj("ddd")=10
yawer 2007-10-29
  • 打赏
  • 举报
回复
需要在A的某个函数中cocreateinstance B。我觉得!
chnuser 2007-10-29
  • 打赏
  • 举报
回复
你EMAIL给我。我给你个例子。
AsongWam 2007-10-28
  • 打赏
  • 举报
回复
试试把接口改为Custom类型的,然后把GetB的返回值设为IDispatch*,再用B*强制转换。

3,245

社区成员

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

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