使用这样声明的 COM 接口方法:
[ object,
uuid(....),
]
interface IFoo : IUnknown
{
HRESULT Foo([in, out] CACLSID * items);
}
关于编组,是否允许服务器重新分配计数数组?(我认为是,但我不确定了)
它当前的实现只替换了现有的 ID,但我想实现一个更改(不会破坏合同),可以返回更多项目而不引入新接口。
[编辑]请注意CACLSID已经是一个数组,包含一个计数和一个指针。
使用这样声明的 COM 接口方法:
[ object,
uuid(....),
]
interface IFoo : IUnknown
{
HRESULT Foo([in, out] CACLSID * items);
}
关于编组,是否允许服务器重新分配计数数组?(我认为是,但我不确定了)
它当前的实现只替换了现有的 ID,但我想实现一个更改(不会破坏合同),可以返回更多项目而不引入新接口。
[编辑]请注意CACLSID已经是一个数组,包含一个计数和一个指针。
我已经很久没有做 COM 了,但它甚至可以分配一个新的数组吗?在那种情况下不应该CACLSID ** items
吗?
您应该将 Count 作为第二个参数,它指示这么多元素的空间,使用这个 COM 库编组元素
首先,如果你想Foo
接受一个 in 数组,你应该添加一个给出计数的参数,例如:
HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);
警告:此代码尚未编译,只是关闭文档。
其次,您不能在不更改其声明的情况下修改此方法的外部行为。要支持调整大小,您需要能够重新分配数组并传回其地址。您可以使用 a SAFEARRAY
or declare cItems
anditems
作为指向原始类型的指针Foo
,例如:
HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);
同样,没有编译,所以如果你使用它,你实际上必须知道你在做什么。