其他分享
首页 > 其他分享> > c – 从SAFEARRAY获取一个元素(或将其转换为长数组)

c – 从SAFEARRAY获取一个元素(或将其转换为长数组)

作者:互联网

我正在尝试从Visual C中获取SAFEARRAY中的元素(作为函数的输出返回).

我以前从未使用SAFEARRAY,所以我不知道如何处理它.我应该将SAFEARRAY转换为长数组(如何?)或者我可以简单地使用SAFEARRAY中值的索引吗?

解决方法:

您应该熟悉MSDN上的SafeArray文档.

您可能想要做的是调用SafeArrayAccessData()以获取指向安全数组的内存缓冲区的指针,然后直接迭代这些值.这可能是访问值的最有效方法.下面的代码假设很多,您应该确保您理解这些假设(通过阅读安全数组文档)并且它们适用于您的特定情况……

void Func(SAFEARRAY *pData)
{
   void *pVoid = 0;

   HRESULT hr = ::SafeArrayAccessData(pData, &pVoid);

   MyErrorCheck::ThrowOnFailure(hr);

   const long *pLongs = reinterpret_cast<long *>(pVoid);

   for (int i = 0; i < pData->rgsabound[0].cElements; ++i)
   {
      const long val = pLongs[i];

      DoThingWithLong(val);          
   }

   hr = ::SafeArrayUnaccessData(pData);

   MyErrorCheck::ThrowOnFailure(hr);
}

请注意,上面的代码没有看到编译器……

标签:c,visual-c,safearray
来源: https://codeday.me/bug/20190825/1718283.html