STDMETHODIMP CUkey::exportId(BSTR* ret)
{
CStringA str ;
str.Append("zzzzz");
*ret = _bstr_t(str);
return S_OK;
}
js调用IE崩溃:
0x7730DCBB (ntdll.dll) (iexplore.exe 中)处有未经处理的异常: 0xC0000374: 堆已损坏。 (参数: 0x77344268)。
调整代码如下
STDMETHODIMP CUkey::exportId(BSTR* ret)
{
CStringA str ;
str.Append("zzzzz");
*ret = CComBSTR(str).Copy();
return S_OK;
}
正常执行。
原因:原来的代码并没有对返回数据分配空间,函数退出后,str被释放了。ActiveX访问到了被释放的空间导致出错。