为啥ATL的ActieX用interface关键字,而MFC用dispinterface

为什么ATL的ActieX用interface关键字,而MFC用dispinterface?
我建立一个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换个名字,实际不存在的
------解决方案--------------------
前者应该是IUnknown接口
后者应该是IDispatch接口

接口不同,效果等效
------解决方案--------------------
查msdn,上边都有.
ps: 你说的这些是idl语言,它类似于c++,但不太一样。