【问题标题】:How to pass an array of structure as [in, out] paramenter in COM interface definition如何在 COM 接口定义中将结构数组作为 [in, out] 参数传递
【发布时间】:2011-05-28 12:44:39
【问题描述】:

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

[helpstring("方法 ReadVariables")] HRESULT ReadVariables([in] VARIANT varIds, [out] _valStruct* retVals);

对于_valStruct,定义为:

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

}

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

【问题讨论】:

    标签: com


    【解决方案1】:

    伙计,我已经很久没有做过这样的事情了! 无论如何,根据我从 2002 年挖掘的代码,我使用了 SAFEARRAY .. 但可能只是为了 VB 互操作性,如下所示:

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

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

    希望这会有所帮助。

    【讨论】:

    • 嗨小丑,我很高兴得到你的回复这么快。您能否详细说明您的示例代码?关于我的问题,我试图通过 COM 接口传递一个结构数组。坦率地说,我仍然不知道如何做到这一点......
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多