我们的应用程序有一个COM API(用VC ++编写),它公开了一些功能,以便用户可以自动执行任务。现在,我需要添加一个新方法,它应该返回一个列表/数组/字符串向量。由于我是COM的新手,我正在查看该接口的.idl文件中的现有方法。
该idl文件中的一个现有方法如下所示:
interface ITestApp : IDispatch
{
//other methods ..
//...
//...
//...
[id(110), helpstring("method GetFileName")] HRESULT GetFileName([out, retval] BSTR *pFileName);
//...
//...
//...
};
我的任务是编写一个类似的新方法,但它不应返回一个BSTR字符串,而应返回它们的列表/数组/向量。
我该怎么做?
谢谢!
答案 0 :(得分:4)
由于您的是与自动化兼容的界面,因此您需要使用safearrays。会是这样的:
// IDL definition
[id(42)]
HRESULT GetNames([out, retval] SAFEARRAY(BSTR)* names);
// C++ implementation
STDMETHODIMP MyCOMObject::GetNames(SAFEARRAY** names) {
if (!names) return E_POINTER;
SAFEARRAY* psa = SafeArrayCreateVector(VT_BSTR, 0, 2);
BSTR* content = NULL;
SafeArrayAccessData(psa, (void**)&content);
content[0] = SysAllocString(L"hello");
content[1] = SysAllocString(L"world");
SafeArrayUnaccessData(psa);
*names = psa;
return S_OK;
}
错误处理留给读者练习。