在网上找了一个简单窗口程序,自己敲到Visual C++ 6.0上编译连接没问题,但运行就出现错误,错误如下图。

如果继续运行出现错误如下图

但从网上复制到Visual C++ 6.0上编译连接运行都正确,并生成一个窗口。
自己敲的程序如下
#include<windows.h>
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
switch(Msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPprevInstance,LPSTR lpCmdLine,int nShowCmd)
{
char *cName="MyWindow";
WNDCLASSEX wc;
HWND hWnd;
MSG Msg;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=NULL;
wc.hIcon=NULL;
wc.hIconSm=NULL;
wc.hInstance=hInstance;
wc.lpszClassName=(LPSTR)cName;
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&wc);
hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,cName,"the light of help",WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);
if(hWnd==NULL)
{
MessageBox(NULL,"There's an Error","Error Title",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.message;
}

这是一个很简单但是很经典的WIN32入门程序。
出错原因有两个方面:
1、首先,确定你的wc.lpfnWndProc=WinProc;,这个参数没有赋值,增加即可。
2、回调函数WinProc的类型出了错,它不是LRESULT WINAPI WinProc,WINAPI,你可以看定义,它是一个_stdcall的函数调用约定,显然放在这里是不合适的,应该是一个CALLBACK的回调函数类型。

总结:
1、注意项目是WIN32 APP应用程序,不是控制台CONSOLE。
2、增加wc.lpfnWndProc=WinProc;这样一条语句。
3、在此程序的开头第二行,把LRESULT WINAPI WinProc修改为LRESULT CALLBACK WinProc。
温馨提示:答案为网友推荐,仅供参考
相似回答