剛照着一本Windows程序設計教程,用API寫了個窗口,用VC++6.0 編譯 連接 都無錯誤,但是運行時候出錯,程序運行不出來。彈出如下報錯信息:
我機子的操作系統是 WindowsXP Pro SP3
程序的代碼如下:
#include<windows.h>
LONG WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpszCmdLine,int nCmdShow)
{
WNDCLASS wc;
HWND hwnd;
MSG msg;
wc.style=0; //class style
wc.lpfnWndProc=(WNDPROC)WndProc; //Window procedure address
wc.cbClsExtra = 0; //Class extra bytes
wc.cbWndExtra = 0; //Window extra bytes
wc.hInstance = hInstance; //Instance handle
wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); //Icon handle
wc.hCursor = LoadCursor(NULL,IDC_ARROW); //Cursor handle
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //Background color
wc.lpszClassName = "MyWndClass"; //WNDCLASS name
RegisterClass(&wc);
hwnd = CreateWindow(
"MyWndClass", //WNDCLASS name
"SDK Application", //Window title
WS_OVERLAPPEDWINDOW, //Window style
CW_USEDEFAULT, //Horizontal position
CW_USEDEFAULT, //Vertical position
CW_USEDEFAULT, //Initial width
CW_USEDEFAULT, //Initial height
HWND_DESKTOP, //Handle of parent window
NULL, //Menu handle
hInstance, //Application's instance handle
NULL //Window-creation data
);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
Ellipse(hdc,0,0,200,100);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
Compile和Build都沒有問題,就是按F5調試運行出現那個“該內存不能爲‘read’”.程序運行不出來,點擊“確定”直接回到編碼區;點擊“取消”就進入了VC編譯器中的彙編命令區。搞得我一頭霧水!
在論壇上發帖求助高人,原來在WinMain函數中WNDCLASS wc;給wc的成員賦值時,忘了給wc.lpszMenuName賦值。
這種問題的解決方法大致有兩招:1、初始化wc:WNDCLASS
wc={0};
2、給wc.lpszMenuName賦值:wc.lpszMenuName=NULL
或wc.lpszMenuName=“Name”//此處Name可以是任意字符