使用COM接口方法声明为:

[ object,
  uuid(....),
]
interface IFoo : IUnknown 
{
  HRESULT Foo([in, out] CACLSID * items);
}

关于编组,服务器是否允许重新分配计数的数组? (我认为是,但我不确定了)

它当前的实现仅替换现有的ID,但我想实现一个更改(不会破坏合同),可能会返回更多项而不引入新接口。

[edit] 请注意 CACLSID 已经是一个数组,包含一个计数和一个指针。

有帮助吗?

解决方案

我很长时间没有完成COM,但是甚至可以分配一个新阵列吗?在这种情况下,它应该不是 CACLSID ** items

其他提示

你应该将Count作为第二个参数来指示这么多元素的空间,使用这个COM库封送元素

首先,如果你想让 Foo 接受一个in数组,你应该添加一个给出计数的参数,例如:

HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);

警告:此代码尚未编译,只是关闭文档。

其次,您无法在不更改其声明的情况下修改此方法的extern行为。要支持调整大小,您需要能够重新分配数组并传回其地址。您可以使用 SAFEARRAY 或声明 cItems items 作为原始类型 Foo 的指针,例如:

HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);

同样,没有编译,所以如果你使用它,你实际上必须知道你正在做什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top