使用COM接口方法声明为:
[ object,
uuid(....),
]
interface IFoo : IUnknown
{
HRESULT Foo([in, out] CACLSID * items);
}
关于编组,服务器是否允许重新分配计数的数组? (我认为是,但我不确定了)
它当前的实现仅替换现有的ID,但我想实现一个更改(不会破坏合同),可能会返回更多项而不引入新接口。
[edit] 请注意CACLSID已经是一个数组,包含一个计数和一个指针。
答案 0 :(得分:1)
我很长时间没有完成COM,但是甚至可以分配一个新阵列?那不应该是CACLSID ** items
吗?
答案 1 :(得分:0)
你应该将Count作为第二个参数来指示这么多元素的空间,使用这个COM库封送元素
答案 2 :(得分:0)
首先,如果你想让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);
同样,没有编译,所以如果你使用它,你实际上必须知道你正在做什么。