最近在更新用MASM32编写系统信息采集程序sysInfo,调试时突然发现程序运行时sysInfo窗口不显示了。
以前也遇到过这种情况,当时排查发现是资源ID冲突造成的。
先检查资源ID,发现没有问题。
检查修改过的代码,发现调用CreateWindowsEx函数的代码中,传递给dwExStyle参数的值是WS_OVERLAPPEDWINDOW。
c_MainWinStyle equ WS_OVERLAPPEDWINDOW INVOKE CreateWindowEx, c_MainWinStyle, ADDR g_szClassName,ADDR g_szAppInfo,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500,400,NULL,NULL, hInst,NULL
WS_OVERLAPPEDWINDOW可以传递给 dwStyle参数,但把它传递给wExStyle参数是否引发了这个问题呢?
修改c_MainWinStyle的值为NULL
c_MainWinStyle equ NULL
编译连接运行,sysInfo窗口终于显示出来了。
这类bug比较承隐蔽,用调试程序也不容易发现,因此记下来,如果大家在使用MASM32编程时也遇到这种程序窗口不显示的故障,不妨检查一下调用CreateWindowsEx函数的代码是否正确传递了参数。