mfc idl文件

场景:为啥ATL和MFCidl文件,声明的语法有所不同

为什么ATL和MFC的idl文件,声明的语法有所不同?
ATL生成一个简单对象(其实就是一个C++类),如果是继承dispatch接口的话,声明的形式是:

interface IDispSimple : IDispatch{
[id(1)] HRESULT Add([in] VARIANT v1, [in] VARIANT v2, [out,retval] VARIANT* pVal);
[id(2), helpstring("My help string")] HRESULT Upper([in] BSTR str,[out,retval] BSTR* pVal);
};

如果我把interface关键字改成didspinterface就会有错误:

dispinterface IDispSimple{
[id(1)] HRESULT Add([in] VARIANT v1, [in] VARIANT v2, [out,retval] VARIANT* pVal);
[id(2), helpstring("My help string")] HRESULT Upper([in] BSTR str,[out,retval] BSTR* pVal);
};

可是这个dispinterface关键字,恰恰是建立一个MFC类型(支持自动化)的时候,生成的idl文件中用来表示这是一个IDispatch接口的,如下面这样:

[ uuid(4E35FD0C-F4B0-401E-8D52-1D5508F777C0) ]
dispinterface IMyMFCAuto
{
properties:
methods:
[id(1)] LONG Add(LONG n1, LONG n2);
};

看起来ATL工程和MFC工程中的关键字不能互通? 还是说ATL和MFC对于com的支持方式有根本的不同?

------解决方案--------------------
mfc atl 用的是不同方式实现IDispatch,idl不是跟mfc或者atl有关,它是由单独midl编译程序处理, 

------解决方案--------------------
ATL使用的是IDL
MFC使用的ODL

两个还是有点区别