为什么ATL的ActieX用interface关键字,而MFC用dispinterface?

ui99ii 2013-12-06 09:40:08
我建立一个ATL的ActiveX Ctrl,idl里面增加的内容如下:

[
object,
uuid(E6307BA9-20B9-4E28-9071-67E2C1D0D6E7),
dual,
nonextensible,
pointer_default(unique)
]
interface IAC1 : IDispatch{
};

这里有dual属性,然而并没有oleautomation属性。
还有就是用了interface关键字而不是dispinterface关键字。

而如果用MFC建立一个ActiveX控件,那么idl的内容里面使用dispinterface关键字,并且并没有使用dual/oleautomation这样的attribute。如下所示。这是为什么呢?

[ uuid(B122598D-283A-48EC-B5AC-826281207CB1), version(1.0),
control ]
library MFCActiveXControl1Lib
{
importlib(STDOLE_TLB);

// Primary dispatch interface for CMFCActiveXControl1Ctrl
[
uuid(927E2A47-FE42-4E05-8D3D-A84BFBD7EB08)
]
dispinterface _DMFCActiveXControl1
{
properties:
methods:

[id(DISPID_ABOUTBOX)] void AboutBox();
};

这两种idl的写法等价吗? 还是会有什么不同呢?
谢谢。
...全文
239 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2013-12-07
  • 打赏
  • 举报
回复
查msdn,上边都有. ps: 你说的这些是idl语言,它类似于c++,但不太一样。
worldy 2013-12-06
  • 打赏
  • 举报
回复
前者应该是IUnknown接口 后者应该是IDispatch接口 接口不同,效果等效
ui99ii 2013-12-06
  • 打赏
  • 举报
回复
引用 1 楼 u013034386 的回复:
第二种的话,就是IDispatch换个名字,实际不存在的
存在啊,dispinterface就是一个会高亮的关键字,msdn还有解释呢。 你说的"实际不存在的"如何理解?
rootkit_ole 2013-12-06
  • 打赏
  • 举报
回复
第二种的话,就是IDispatch换个名字,实际不存在的

3,245

社区成员

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

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