如何从COM模块中的函数返回字符串数组?

How to return an array of strings from a function in a COM module?

本文关键字:返回 函数 字符串 数组 COM 模块      更新时间:2023-10-16

>我的函数体如下

STDMETHODIMP CMyCustomAddin::getArray(SAFEARRAY** pArray)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
try {
CComSafeArray<BSTR> sa(3);
// 'v' is a std::vector<std::wstring>
std::vector<std::string> v;
v.push_back("string1"); v.push_back("string2"); v.push_back("string3");
for (LONG i = 0; i < 3; i++)
{
CComBSTR bstr = ToBstr(v[i]);
HRESULT hr = sa.SetAt(i, bstr.Detach(), FALSE);
if (FAILED(hr))
{
AtlThrow(hr);
}
}
*pArray= sa.Detach();
}
catch (const CAtlException& e)
{
AfxMessageBox(_T("Exception"));
}
return S_OK;
}

我从另一个 COM 模块调用此函数为:

SAFEARRAY** arr;
pMyCUstomAddinObj->getArray(arr);

我在

*pArray= sa.Detach();

如何获取数组并遍历它?

SAFEARRAY** arr;
pMyCUstomAddinObj->getArray(arr);

通过此初始化pArray指向垃圾,因此*pArray = ...是一个错误。也许你的意思是写:

SAFEARRAY* arr;
pMyCUstomAddinObj->getArray(&arr);