gpt4 book ai didi

c++ - 当调用包含 SAFEARRAY 的 VARIANT 时,VariantClear() 会抛出异常

转载 作者:行者123 更新时间:2023-11-30 04:38:15 25 4
gpt4 key购买 nike

我正在尝试将 BYTES 数组中的一些数据包装到 VARIANT 中,但我似乎无法释放数据:

当我运行这段代码时...

SAFEARRAY * NewSArray;

SAFEARRAYBOUND aDim[1]; // a one dimensional array
aDim[0].lLbound = 0; //Sets the index to start from 0

//Sets the number of elements (bytes) that will go into the SAFEARRAY
aDim[0].cElements = pBuffer->GetSize();

NewSArray = SafeArrayCreate(VT_UI1, 1, aDim); // create a 1D SafeArray of BYTES

//Put the data from the man view into the SAFEARRAY
NewSArray->pvData = pBuffer->GetBuffer();

//FP Spread expects the spreadsheet data in the form of a VARIANT so we must pack the data from the SAFEARRAY into a
//VARIANT
VARIANT SpreadsheetBuffer;
VariantInit(&SpreadsheetBuffer);

SpreadsheetBuffer.vt= VT_ARRAY | VT_UI1; // set type to an array of bytes
SpreadsheetBuffer.parray= NewSArray;

try
{
VariantClear(&SpreadsheetBuffer);
}
catch (char *str)
{
AfxMessageBox(str);
}

我收到这条消息:“... 0xC015000F 中...处的未处理异常:被停用的激活上下文不是最近激活的上下文。”

顺便说一句,这条消息不会在我的 AfxMessageBox 中弹出。它似乎与变体类型有关,因为如果我不设置它,我就不会得到异常。 pBuffer 中的数据只是之前从 SAFEARRAY 中拉出的 BYTE 数组。

有人知道我做错了什么吗?

谢谢

最佳答案

SafeArrayCreate 创建一个安全数组并为 pvData 成员分配内存。在此之后,您不应重置 pvData 成员。您应该将数据从 pBuffer 复制到 pvData 指向的位置,或者使用 SafeArrayAccessDataSafeArrayPutElement功能。

关于c++ - 当调用包含 SAFEARRAY 的 VARIANT 时,VariantClear() 会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268627/

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