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