mer*_*rch 4 c++ safearray visual-c++
我正在尝试从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);
}
Run Code Online (Sandbox Code Playgroud)
注意上面的代码还没有编译器...