您不能vector
在 COM 接口中使用 IDL 或其他方式。您可以返回一个安全的接口指针数组;它看起来像这样:
// In IDL
[propget]
HRESULT ThisList([out,retval] SAFEARRAY(IThis*)* value);
// In C++
HRESULT get_ThisList(SAFEARRAY** value);
其他替代方案包括一个一致的数组(尽管这对于自动化接口来说是不可取的,就像你的那样),以及一个表示对象列表的单独集合对象。
的实现get_ThisList
可能如下所示:
STDMETHODIMP MyObject::get_ThisList(SAFEARRAY** value) {
if (!value) return E_POINTER;
SAFEARRAYBOUND bound = {mThisList.size(), 0};
*value = SafeArrayCreate(VT_UNKNOWN, 1, &bound);
IUnknown** data;
SafeArrayAccessData(*value, (void**)&data);
for (int i = 0; i < mThisList.size(); ++i) {
(data[i] = mThisList[i])->AddRef();
}
SafeArrayUnaccessData(*value);
return S_OK;
}
错误处理留给读者练习。