如何在COM接口定义中作为[in,out]参数传递结构数组

时间:2010-12-20 22:22:30

标签: com

我在COM接口定义中传递一组结构时遇到了一些问题。例如,我试图在一个读取函数中定义一系列变量Ids并且我期望回复函数(相同的函数)将带回一个与之前定义的变量Ids对应的值数组:

  

[helpstring(“method ReadVariables”)] HRESULT ReadVariables([in]   VARIANT varIds,[out] _valStruct * retVals);

对于_valStruct,定义为:

struct _valStruct
{
   int varId;
   double varVal;
   int timeStamp;
   double funcId;
....

}

我不熟悉COM,我只知道一些基本类型,比如int,double等等......我真诚地在这里的一些专家会给我一些详细的示例代码或相关信息。非常感谢您的帮助......谢谢!

1 个答案:

答案 0 :(得分:0)

男人,自从我做了类似的事情以来已经很久了! 无论如何,根据我从2002年开始编写的代码,我使用了SAFEARRAY ..但也许仅用于VB互操作性,如下所示:

[id(9), helpstring("method Keys")] HRESULT Keys([out, retval] SAFEARRAY(ComInt128)* pKeys);

然后,您可以使用SafeArrayAllocDescriptorSafeArrayAllocData等API函数创建数组,并使用SafeArrayAccessData / SafeArrayUnAccessData来管理内容。

希望这有帮助。