在一个DCOM相关程序的调试中吃尽了苦头!事件源在激发事件时无端地产生内存泄漏,最后终于查出不是我的错!
ATL 的一个头文件 atlevent.h 的第165行处的一个函数 __ComInvokeEventHandler 的实现代码存在问题,应该把它改为:inline HRESULT
__ComInvokeEventHandler(IDispatch* pDispatch, DISPID id, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult) {
if (pVarResult != 0) {
::VariantInit(pVarResult);
}
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
UINT nArgErr = (UINT)-1;
HRESULT hr = pDispatch->Invoke(id, IID_NULL,
LOCALE_USER_DEFAULT, wFlags,
pDispParams, pVarResult,
&excepInfo, &nArgErr);
IErrorInfo* perrinfo = 0;
if (FAILED(hr)) {
_com_handle_excepinfo(excepInfo, &perrinfo);
SetErrorInfo(0, perrinfo);
perrinfo->Release();
}
return hr;
}此贴的目的在于收集VC.net的BUG,希望大家把知道的BUG都贴上来,
ATL 的一个头文件 atlevent.h 的第165行处的一个函数 __ComInvokeEventHandler 的实现代码存在问题,应该把它改为:inline HRESULT
__ComInvokeEventHandler(IDispatch* pDispatch, DISPID id, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult) {
if (pVarResult != 0) {
::VariantInit(pVarResult);
}
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
UINT nArgErr = (UINT)-1;
HRESULT hr = pDispatch->Invoke(id, IID_NULL,
LOCALE_USER_DEFAULT, wFlags,
pDispParams, pVarResult,
&excepInfo, &nArgErr);
IErrorInfo* perrinfo = 0;
if (FAILED(hr)) {
_com_handle_excepinfo(excepInfo, &perrinfo);
SetErrorInfo(0, perrinfo);
perrinfo->Release();
}
return hr;
}此贴的目的在于收集VC.net的BUG,希望大家把知道的BUG都贴上来,
解决方案 »
- SetWindowsHookEx 无法在 IE8 上正常工作吗?
- 谁来帮我看看……为什么会无效内存引用……
- 头疼啊char
- 一个关于CArchive的问题
- 如何改变通用对话框CFileDlg的标题栏内容?
- 我想实现保存网页,就象微软的IE保存网页那样
- 在listbox中显示乱码是为什么?
- 请教一下,我用vc++编程的时候,在一个工程中新建一个对话框
- 求救,在dll类中调用SetTimer发生运行时错误
- 想请问onpaint()函数是单独线程在执行吗,Invaldate()函数刷新时调用onpaint,Invaldate()什么时候返回?
- 老大们 , 按钮问题(online wait for....)
- 请问TextOut怎么用
555~~