COM类是不是不能被实例化呢?

linkaihui 2006-06-06 10:58:36
我是初学者,我在ATL建的项目中加入了一个NEW ATL OBJECT,增加了一个Cmyatl的COM类,但是我实例化这个COM类的时候(用NEW或是Cmyatl my;)程序都会报错。说是不能实例化这个抽象类。我想问的是COM类是不是都是抽象类,都不能实例化呢?
...全文
187 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
test422 2006-06-09
  • 打赏
  • 举报
回复
可以被实例化,只是你实例化的目的是什么?
如果实例化具体的类,就完全失去了COM组件模型的优势了。
如果你把COM类的所有虚拟方法都实现了,跟实例化普通类没有区别。实际上在类厂中还不是也需要用New实例化。
如果用ATL开发,需要在实例化时用如下形式:
IInterface* pInterface = new CComObject<CInterface>();
以上CComObject实现了IUnknown的三个方法(通过直接使用CComObjectRootEx提供的方法)。直接使用New CInterface是不行了。
gdsdyl 2006-06-08
  • 打赏
  • 举报
回复
可以在COM中使用类,而COM则只能实例化接口.
seasol 2006-06-08
  • 打赏
  • 举报
回复
同意cpio,只是少一个&
CComObject<Cmyatl>* my;
CComObject<Cmyatl>::CreateInstance(&my);
-------------------
Cmyatl继承自IUnknown接口,但没有实现这个接口中的方法,
所以还是个抽象类,不能实例化。

而CComObject才真正实现了IUnknown接口。

=============================
全新设计的CSDN助手,支持CSDN所有功能,支持监视、收藏、历史
http://community.csdn.net/expert/topicview1.asp?id=4806193

布学无数 2006-06-07
  • 打赏
  • 举报
回复
COM 类是不能直接用来实例化的,不过你可以实例化一个 C++ 类
COM 类是实现了一个接口,如果你想使用这个接口的功能,就必须实例化这个接口
Johnny_de 2006-06-07
  • 打赏
  • 举报
回复
我还是不太理解你的意思,类的函数怎么实例化它本身?
如果你硬要这样写也是可以的,你就在IDL里接口函数里传coclass类的指针就行了,当然你要把该接口的声明放到coclass下.
linkaihui 2006-06-06
  • 打赏
  • 举报
回复
比如我添加了一个COM类叫CMYCOM,现在在这个COM类中添加成员函数的时候需要实例化它本身,因该怎么写呢?好象上面那个人的方法可以。
Johnny_de 2006-06-06
  • 打赏
  • 举报
回复
能把你的代码贴点出来吗?我不太理解你的问题。
linkaihui 2006-06-06
  • 打赏
  • 举报
回复
我是指在服务器方,如果要实例化本身COM类的情况
cpio 2006-06-06
  • 打赏
  • 举报
回复

CComObject<Cmyatl>* my;

CComObject<Cmyatl>::CreateInstance(my);
Johnny_de 2006-06-06
  • 打赏
  • 举报
回复
你在哪里实例化COM的?
在客户端是需要用CoCreateInstance来实例化COM组件的,我觉得你对COM还不了解,建议你先好好看看书。

3,245

社区成员

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

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