为何ATL的ActieX用interface关键字,而MFC用dispinterface
为什么ATL的ActieX用interface关键字,而MFC用dispinterface?
我建立一个ATL的ActiveX Ctrl,idl里面增加的内容如下:
这里有dual属性,然而并没有oleautomation属性。
还有就是用了interface关键字而不是dispinterface关键字。
而如果用MFC建立一个ActiveX控件,那么idl的内容里面使用dispinterface关键字,并且并没有使用dual/oleautomation这样的attribute。如下所示。这是为什么呢?
这两种idl的写法等价吗? 还是会有什么不同呢?
谢谢。
------解决方案--------------------
第二种的话,就是IDispatch换个名字,实际不存在的
我建立一个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的写法等价吗? 还是会有什么不同呢?
谢谢。
------解决方案--------------------
第二种的话,就是IDispatch换个名字,实际不存在的