IDL中的dual关键字。
最近用了一点ATL,有点问题请教一下。
在生成的IDL文件中,我添加了4个方法,仅仅为了测试。
[
object,
uuid(A8124E10-EBE5-48FE-B1F0-123C0D310C66),
dual,
helpstring("IMath Interface"),
pointer_default(unique)
]
interface IMath : IDispatch
{
[id(1), helpstring("method Add")] HRESULT Add( [in] VARIANT vOp1, [in] VARIANT vOp2, [out, retval] VARIANT *pvResult );
[id(2), helpstring("method Sub")] HRESULT Sub( [in] VARIANT vOp1, [in] VARIANT vOp2, [out, retval] VARIANT *pvResult );
[id(3), helpstring("method Mul")] HRESULT Mul( [in] VARIANT vOp1, [in] VARIANT vOp2, [out, retval] VARIANT *pvResult );
[id(4), helpstring("method Div")] HRESULT Div( [in] VARIANT vOpt1, [in] VARIANT vOpt2, [out, retval] VARIANT *pvResult );
};
我对双接口的理解其实很简单,就是一个接口(vtable)中同时包含IDispatch和自动化对象本身的属性方法。
我想知道在IDL文件中"Dual"这个keyword有什么作用?无论加不加这个关键字,IMath都应该是个双接口啊。因为下面的测试程序始终都能运行通过。
CComPtr< IUnknown > spUnknown;
HRESULT hr = spUnknown.CoCreateInstance( L"Math" );
CComQIPtr< IDispatch > spDisp( spUnknown );
...
spDisp->Invoke(...)
...
CComQIPtr< IMath > spMath( spUnknown );
spMath->Add(...)