通过 WRL idl 检索数组
Retrieve array through WRL idl
我也问过同样的问题here。
我在制作 API 对象数组时遇到了问题。
到目前为止,这是我尝试过的。
我编写了将 return 数组作为参数
的方法
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
检索对象数组
缓冲区的正确 IDL 取决于它是进还是出。
来自 SDK 中的 windows.security.cryptography.idl
:
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" 数组类型 - 始终复制数组。调用者分配它并且被调用者获取副本,或者被调用者分配它并且调用者获得所有权。
我也问过同样的问题here。
我在制作 API 对象数组时遇到了问题。
到目前为止,这是我尝试过的。
我编写了将 return 数组作为参数
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
检索对象数组缓冲区的正确 IDL 取决于它是进还是出。
来自 SDK 中的 windows.security.cryptography.idl
:
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" 数组类型 - 始终复制数组。调用者分配它并且被调用者获取副本,或者被调用者分配它并且调用者获得所有权。