【貌似是内存回收问题】MFC 里的 一个函数 COleDispatchDriver::InvokeHelperV 为啥系统函数也会报错?

灵魂火焰 2015-12-25 12:04:44
---------------------------
Microsoft Visual C++
---------------------------
User breakpoint called from code at 0x770256bc
---------------------------
确定
---------------------------

是因为pvarResult没有初始化造成的吗?pvarResult是mfc源文件里的 参数 该怎么解决呢?
-----------------------------------------------
说一下我的环境,任务是要将老的XP程序迁移到win7下运行
所以开发环境是Win7(32)+VC6.0
程序用到了 formulaone6.1 表格控件
Roll1程序与其他进程之间有管道连接

堆栈信息如下:
NTDLL! 77026d9c()
NTDLL! 76fe93f1()
OLE32! 765b625c()
OLEAUT32! 7678443a()
OLEAUT32! 76783ea3()
TTF16! 1008160b()
TTF16! 10082c4d()
TTF16! 10089576()
TTF16! 1008e2be()
COleDispatchDriver::InvokeHelperV(long 116, unsigned short 1, unsigned short 0, void * 0x00000000, const unsigned char * 0x005391ec, char * 0x00121004) line 345 + 54 bytes
COleControlSite::InvokeHelperV(long 116, unsigned short 1, unsigned short 0, void * 0x00000000, const unsigned char * 0x005391ec, char * 0x00120fe0) line 976
CWnd::InvokeHelper(CWnd * const 0x002b17f0 {CMF1Book hWnd=???}, long 116, unsigned short 1, unsigned short 0, void * 0x00000000) line 354
CF1Book::GetFont(unsigned short * * 0x002b15d4, short * 0x002b15d0, int * 0x002b15cc, int * 0x002b15c8, int * 0x002b15c4, int * 0x002b15c0, long * 0x002b15bc, int * 0x002b15b8, int * 0x002b15b4) line 2357 + 58 bytes
CRoll1View::LPDialog() line 1618
CRoll1View::OnCommand(unsigned int 113, long 0) line 602
CWnd::OnWndMsg(unsigned int 273, unsigned int 113, long 0, long * 0x0012fcbc) line 1608 + 28 bytes
CWnd::WindowProc(unsigned int 273, unsigned int 113, long 0) line 1596 + 30 bytes
AfxCallWndProc(CWnd * 0x002b1508 {CRoll1View hWnd=???}, HWND__ * 0x000a086c, unsigned int 273, unsigned int 113, long 0) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x000a086c, unsigned int 273, unsigned int 113, long 0) line 379
USER32! 761dc4e7()
...
===========================
其中 COleDispatchDriver::InvokeHelperV(long 116, unsigned short 1, unsigned short 0, void * 0x00000000, const unsigned char * 0x005391ec, char * 0x00121004) line 345 + 54 bytes
在MFC的源文件 OLEDISP2.CPP 中

报错入口行如下:
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
&dispparams, pvarResult, &excepInfo, &nArgErr);

当时的参数值如下:
--------------------------------------
dwDispID 116
--------------------------------------
IID_NULL GUID_NULL
--------------------------------------
wFlags 1
--------------------------------------
- dispparams {...}
+ rgvarg 0x002b5e98 {True VT_BOOL|VT_BYREF}
+ rgdispidNamedArgs 0x00000000
cArgs 9
cNamedArgs 0
--------------------------------------
- pvarResult 0x00000000 {???}
vt CXX0030: Error: expression cannot be evaluated
wReserved1 CXX0030: Error: expression cannot be evaluated
wReserved2 CXX0030: Error: expression cannot be evaluated
wReserved3 CXX0030: Error: expression cannot be evaluated
lVal CXX0030: Error: expression cannot be evaluated
bVal CXX0030: Error: expression cannot be evaluated
---------------------------------------
- excepInfo {...}
wCode 0
wReserved 0
+ bstrSource 0x00000000
+ bstrDescription 0x00000000
+ bstrHelpFile 0x00000000
dwHelpContext 0
pvReserved 0x00000000
pfnDeferredFillIn 0x00000000
scode 0
---------------------------------------
nArgErr 4294967295
---------------------------------------

菜鸟求大神们指点。。
...全文
344 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
灵魂火焰 2015-12-25
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
直接加代码,打印一下参数,查看出错的时候,传入的参数是否有问题
报错的时候就已经进 Disassembly 了,堆栈里最近的一个函数就是 COleDispatchDriver::InvokeHelperV(long 116, unsigned short 1, unsigned short 0, void * 0x00000000, const unsigned char * 0x005391ec, char * 0x00121004); 是每次到这里都会出错。具体参数值得话,上面也打印出来了, 但是我不知道该如何明确这些参数的值是不是对的,比如第四个参数 0x00000000 可不可以呢? 从哪里可以明确出是哪个参数出错了呢? 啊。。刚刚 查了 InvokeHelper(这个API ,挺详细的,我先仔细看看。
oyljerry 2015-12-25
  • 打赏
  • 举报
回复
直接加代码,打印一下参数,查看出错的时候,传入的参数是否有问题
灵魂火焰 2015-12-25
  • 打赏
  • 举报
回复
米有大牛帮我。。。

3,248

社区成员

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

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