gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:28 25 4
gpt4 key购买 nike

我正在尝试从 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++ - 从 SAFEARRAY 中获取一个元素(或将其转换为长数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20218991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com