关于VariantClear函数释放SAFEARRAY所占内存失败的问题?

whocares 2003-11-04 04:40:42
有段代码如下:
VARIANT var;
HRESULT hr;
SAFEARRAY* psa = NULL;
BYTE* pByte = NULL;

::VariantInit(&var);

psa = ::SafeArrayCreateVector(VT_UI1, 0, 1024*1024*3);
::SafeArrayAccessData(psa, (void**) &pByte);
for (int i = 0; i < 1024*1024*3; i++)
{
*(pByte + i) = 1;
}
::SafeArrayUnaccessData(psa);

var.vt = VT_ARRAY;
var.parray = psa;

hr = ::VariantClear(&var);

在调用VariantClear函数后,hr的值为0x80020008,"Bad Variable Type" for SAFEARRAY,同时内存显示没有释放上面分配的3M(1024*1024*3)内存.

MSDN上关于VariantClear函数有段说明是"The function clears a VARIANTARG by setting the vt field to VT_EMPTY. The current contents of the VARIANTARG are released first. If the vt field is VT_BSTR, the string is freed. If the vt field is VT_DISPATCH, the object is released. If the vt field has the VT_ARRAY bit set, the array is freed."

有谁知道为什么VariantClear函数失败?
...全文
329 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧