大约10月份的一个更新,更新后我做的程序就不能运行了,后来我查了一下,是一个CreateDialog出现错误。
代码如下://创建应用程序主窗口
hMainWnd=CreateWindow(L"mt",L"mt",WS_POPUPWINDOW,0,0,FORM_WIDTH,FORM_HEIGHT,NULL,NULL,hInstance,NULL);
if(hMainWnd==NULL) 
{
MessageBox(NULL,L"创建主窗口时发生错误!",L"错误信息",MB_OK|MB_ICONSTOP);
return false;
}//显示欢迎屏
hSplash=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_SPLASH),hMainWnd,(DLGPROC)SplashDlgProc);
//DWORD err=GetLastError();
if(hSplash==NULL)
{
MessageBox(NULL,L"创建Splash窗口时发生错误!",L"错误信息",MB_OK|MB_ICONSTOP);
return false;
}程序的大致意思是创建主窗口时显示一个splash屏幕显示进入的进度,以前完全正常,现在在hSplash=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_SPLASH),hMainWnd,(DLGPROC)SplashDlgProc); 返回的hSplash是NULL,但是DWORD err=GetLastError();取回的却是0。实在是搞不明白,请大家讨论一下。PS:那个更新在系统还原中显示"Software Distribution Service 2.0",如果没有显示这个更新的机器上使用没有问题,只要有这个的就会出错。另,我测试了一下,如果我跳过splash这段后,程序中所有使用CreateWindow创建的按钮都没有,我想也应该是这个错误导致的。

解决方案 »

  1.   

    我跟过,在CreateDialog时。进入过SplashDlgProc3次,记得有一个是设置字体的,另外两个不记得是什么消息了,反正最终也没有发到SplashDlgProc 初始化的消息。
      

  2.   

    CreateDialog其实在后台调用CreateWindows,这个函数应该是不会有问题的。我怀疑是你的窗口上的控件的问题,打上Patch之后,可能有些Control出问题了。因为CreateWindow的时候它会创建所有的Controld
      

  3.   

    我主窗口使用的控件只有 STATIC msctls_progress32 BUTTON COMBOBOX  EDIT,其他的没有使用。另外我查了一下KB923191,里面更新了comctl32.dll文件,更新前版本是2180,更新后是2982. 现在是在2180版本下肯定什么问题没有,但是在2982下就出错。