昨天在调试一个小程序的时候,发现这样一个问题:当我跟踪执行到创建窗口类的代码时,执行到“wcl.lpszMenuName = NULL;”时,调试信息提示wcl.lpszMenuName 是错误的指针,执行完这一句后,仍旧提示是错误的指针。当时我以为是内存地址发生了冲突,找半天也没找到原因,索性就重写了个最简单的窗口生成程序。如下:
#include "windows.h"LRESULT CALLBACK WndProc(HWND hwnd,
UINT msg, 
WPARAM wParam,
LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
WNDCLASS wcl;
ZeroMemory(&wcl,sizeof(WNDCLASS)); wcl.lpszMenuName = NULL;//提示错误的指针
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcl.hCursor = LoadCursor(0,IDC_ARROW);
wcl.hIcon = LoadIcon(0,IDI_APPLICATION);
wcl.hInstance = hInstance;
wcl.lpfnWndProc = (WNDPROC)WndProc;
wcl.lpszClassName = "Window02";

wcl.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wcl))
{
::MessageBox(0,"register class faile!",0,0);
return FALSE;
} HWND hwnd = ::CreateWindow("Window02","Window02",WS_OVERLAPPEDWINDOW,
(GetSystemMetrics(SM_CXSCREEN) - 640) / 2,//窗口置中
(GetSystemMetrics(SM_CYSCREEN) - 480) / 2,//窗口置中
640,480,0,0, hInstance,0); ::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd); return 0;
}
但是,执行到那里时,问题还在。这我就没办法理解了。到底怎么回事啊?