如何从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);
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 接收和返回函数指针的函数指针的类型?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- C++函数链返回函数
- 返回函数指针的函数的签名
- 由于值返回函数中的错误,程序无法编译.它说未声明的标识符
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 如何在 C++ 中从 void 返回函数访问变量
- 返回函数中带有 2 个可选 ctor 的对象
- 如何在 c++ 中返回函数的结构向量
- 返回 C++ 函数中的引用
- 使用向量时,当返回函数更改时,无法看到输出
- 如何在递归中使用返回函数
- 返回函数模板的类型C++作为第二个模板参数
- 为什么静态指针返回函数中有一个"静态"键?
- 递归返回函数,在特殊情况下不返回
- 从类返回函数
- 从类成员函数返回函数指针
- 从返回函数中推断不存在的模板参数