精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究
notepad.exe 中的 0x000007fee9fc45a8 (darhan.ime) 处有未经处理的异常: 0xC000041D: 用户回调期间遇到未经处理的异常。
出问题的代码行为:LRESULT lret = pInput->WindowProc(message, wParam, lParam);
很明显这是个窗口函数,在窗口函数里一般是不会有自己的变量的,但怎么会报异常呢?首次遇到这样的问题,并且是32位环境下不出,只在64位环境下才出,以前的分析堆栈问题的经验用不上,很是压力大。只得用最原始的排查法了。
把新内核放到64位环境下好的项目下,设置界面打开时就出上面的错误,看来就是内核的事,也有可能Handler的事。
不包含头文件,全部注释了没事,肯定是头文件里什么代码有影响,但不是类里,因为没用类。
把几个MB结构体删除了可以了。LJMbRow有问题。
发现有#pragma pack(push, 1),删除了不报错,
但旧版本有这个啊。64位release可执行文件也报错。
再找旧版本代码,发现有 #pragma pack(pop),把它移植到新版本里,问题解决。
总结:少移植#pragma pack(pop)就导致出错。
在有版本控制时,才好解决问题。
有些觉得无关的代码行,只要不多加功能,能留着就留着,比如这里的#pragma pack(pop),旧版本里有,新版本里没有,才导致的问题。所以不要手残,多操作。
MSDN里的内容也没说2者要配对使用,当程序员真累啊!