com - 将 CComSafeArray 传递给需要 SAFEARRAY 的方法时,正确的语法是什么**

标签 com safearray

这很可能有一个非常简单的答案,但我无法弄清楚。

我正在尝试重构一些如下所示的代码:

SAFEARRAY* psa;
long* count;
HRESULT hr = pSomeInterface->ListSomething(&psa, &count);
if (SUCCEEDED(hr))
{
    CComSafeArray<BSTR> sa;
    if (*count > 0)
    {
        sa.Attach(psa);
    }
}

// perform operations on sa
// allow CComSafeArray to destroy the object

return hr;

我想将代码更改为:

CComSafeArray<BSTR> sa;
long* count;
hr = pSomeInterface->ListSomething(&(sa.m_psa), &count);

if (SUCCEEDED(hr))
{
    // perform operations on sa
}

但是当我执行这个时,sa 包含垃圾。发生了什么事以及为什么?正确的语法是什么?

最佳答案

您应该使用CComSafeArray<T>:: GetSafeArrayPtr() 。然而Aamir的使用方式&(sa.m_psa)应该也能工作。

关于com - 将 CComSafeArray 传递给需要 SAFEARRAY 的方法时,正确的语法是什么**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445286/

相关文章:

c# - 没有动态关键字的智能感知?

arrays - 从未知维度的多维数组中获取元素

c++ - SafeArrayAccessData 会返回一个不同于 pvData 的指针吗?

delphi - 我可以从缓冲区 (pByte) 和大小创建 VarArray OleVariant 而不进行复制吗?

c++ - Linux 上的安全阵列

c++ - 有谁知道我在哪里可以找到标准的 Windows 文件对话框工具栏图标?

.net - 是否可以在不添加注册表项的情况下为 COM 互操作注册 .NET 程序集?

c# - GetActiveObject() 与 GetObject() - MK_E_UNAVAILABLE 错误

com - 即使 COM 功能失败,也应该设置 out 参数吗?

c++ - 读取包含SAFEARRAY的UDT的SAFEARRAY