在Visual Sturdio 2008中,我创建了一个简单的Visual C ++ ATL项目,其中我有一个简单的类MyTestCOMClass
。我正在使用VS的添加方法向导来创建此类的方法,我们称之为methodA
和methodB
。
methodA
有一个SAFEARRAY
类型的输入参数,定义如下:
[id(1), helpstring("method methodA")] HRESULT methodA([in] SAFEARRAY(byte) inputA);
如果我尝试编译项目,它编译得很好。
但是,如果我添加methodB
,则定义如下:
[id(2), helpstring("method methodB")] HRESULT methodB([in] SAFEARRAY(byte) inputB, [out] SAFEARRAY(byte) outputB);
编译时我得到错误:
.\MyTestCOMClass.idl(23) : error MIDL2121 : [out] only parameter must not derive from a top-level [unique] or [ptr] pointer/array : [ Type 'wirePSAFEARRAY' ( Parameter 'outputB' ) ]
我了解问题是在[out] SAFEARRAY(byte)
中使用methodB
类型,但我不明白为什么。我是ATL / COM的新手所以有人可以向我解释这个问题吗?