1

我也在这里问过同样的问题。

我在制作返回对象数组的 API 时遇到了麻烦。
这是我到目前为止所尝试的。我编写了将数组作为参数返回的方法

HRESULT GetMyObjectList([out] UINT32* objCount, [out, size_is(*objCount)] MyObject myobj[*]);

这给了我以下错误: Error MIDL4048 [msg]Unsupported array pattern detected. [context]myobj

另外,我尝试将数组添加到自定义对象中,即

[version(1.0)]  
typedef struct MyCustomObject  
{  
    UINT32 count;  
    [size_is(count)] UINT32 someParams1[*]; 
} MyCustomObject;

在这种情况下,我收到以下错误: Error MIDL4000 [msg]A structure field cannot be a type of pointer. [context]: someParams1 [ Field 'someParams1' of Struct 'MyName.Space.MyCustomObject' ]

谁能告诉我这里有什么问题?或提供工作示例以通过 WRL idl 检索对象数组

4

1 回答 1

2

缓冲区的正确 IDL 取决于它是 in 还是 out。

windows.security.cryptography.idlSDK 中:

interface ICryptographicBufferStatics : IInspectable
{
  // other methods omitted...

  HRESULT CreateFromByteArray([in] UINT32 __valueSize, 
    [in] [size_is(__valueSize)] BYTE* value, 
    [out] [retval] Windows.Storage.Streams.IBuffer** buffer);

  HRESULT CopyToByteArray([in] Windows.Storage.Streams.IBuffer* buffer,
    [out] UINT32* __valueSize, 
    [out] [size_is(, *__valueSize)] BYTE** value);
}

请注意,WinRT 中没有“by ref”数组类型 - 始终复制该数组。调用者分配它并且被调用者获取副本,或者被调用者分配它并且调用者获得所有权。

于 2018-03-31T00:58:56.407 回答