如何 return 来自 COM 模块中函数的字符串数组?
How to return an array of strings from a function in a COM module?
我的函数体如下
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);
我的函数体如下
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);