编译成功,运行失败!该如何处理
编译成功,运行失败!!!
看图:
F5后的错误提示,是什么意思?
再看这个可以通过编译但无法运行的源代码:
------解决思路----------------------
你的两个窗口类名不一样,
调用CreateWindow的第一个参数改成wndcls.lpszClassName试试
------解决思路----------------------
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息
WPARAM wParam, // 参数1
WPARAM lParam // 参数2
)
------------------------------------------->
WPARAM lParam // 参数2 类型不对
LPARAM
------解决思路----------------------
你要把工程类型改成windows类型
不是console类型
------解决思路----------------------
链接错误,你把声明删除了,然后把下边的那个实现,放到main上边
------解决思路----------------------
你的函数WinSunProc 声明和定义不一致 导致链接错误,声明的最后的参数类型是LPARAM 定义里最后的参数类型是WPARAM,改成LPARAM再编译一遍
------解决思路----------------------
请楼主今后对“no matching symbolic information found.”这类提示信息眼不见为净。
请楼主以后编译链接通过后不要按F5或Ctrl+F5或点击相应按钮或菜单运行,而要按F11键运行。
------解决思路----------------------
这个函数指针的声明
LRESULT CALLBACK WinSunProc /* 声明一个回调函数 */
(
HWND hwnd, /* 窗口的句柄 */
UINT uMsg, /* 窗口的消息 */
WPARAM wParam,
LPARAM lParam
);
跟实现的参数不符合
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息
WPARAM wParam, // 参数1
WPARAM lParam // 参数2
)
------解决思路----------------------
你这个不叫运行失败,而是叫链接失败
编译、链接、运行……,是完全不同的过程,其错误含义也大相径庭
------解决思路----------------------
你这个代码有问题,当然不会出现,你仔细看一下, CreateWindow时参数中指定的窗口类名为Visual C++ Game
,但你注册的是wndcls.lpszClassName = "Visual c++ name";,改成Visual c++ Game 一样就可以了
------解决思路----------------------
建议更换更高版本的开发环境,虽然VC6轻便快捷,但微软一向都是强制升级的,兼容方便有很多问题,偶尔能用有时也可能有很多不必要的麻烦,不有太多多余无用的东西用Vs03到VS08之间的版本,2008算是最后一个比较不错的版本了,从2010开始臃肿无比。
------解决思路----------------------
那是因为你缺少一个叫VAssistx的神器!
看图:
F5后的错误提示,是什么意思?
再看这个可以通过编译但无法运行的源代码:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinSunProc /* 声明一个回调函数 */
(
HWND hwnd, /* 窗口的句柄 */
UINT uMsg, /* 窗口的消息 */
WPARAM wParam,
LPARAM lParam
);
/*****************************************************
WinMain:Windows程序的入口函数
要创建一个完整的窗口需要经过下面4个步骤:设计一个窗口
类,注册窗口类,创建窗口,显示及更新窗口
******************************************************/
int WINAPI WinMain
(
HINSTANCE hInstance, // 实例句柄,当前应用程序的实例句柄
HINSTANCE hPrevInstance, // 默认这个参数为null
LPSTR lpCmdLine, // 储存第一个命令行参数
int nCmdShow)
{
WNDCLASS wndcls; // 定义一个窗口对象
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 指定窗口背景色
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); // 设置光标样式
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); // 设置图表样式
wndcls.hInstance = hInstance; // 指定窗口实例句柄
wndcls.lpfnWndProc = WinSunProc; // 指定窗口函数,即窗口主处理函数
wndcls.lpszClassName = "Visual c++ name"; // 窗口类名称
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW;
// 注册窗口类
RegisterClass(&wndcls);
HWND hwnd; // 声明窗口句柄
hwnd = CreateWindow(
"Visual C++ Game",
"Visual C++ 游戏开发",
WS_OVERLAPPEDWINDOW,
200, 200, 600, 400,
NULL,NULL,hInstance,NULL
);
// 在这里真正显示窗口
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd); // 更新显示
/***********************************************************
初始化工作完成后,WinMain进入所谓的消息循环
************************************************************/
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); // 转换键盘消息
DispatchMessage(&msg);
}
return 0;
}
/***********************************************************
窗口函数:窗口函数通常利用switch/case方式判断消息的种类,以
决定处置方式,由于其被window调用,所以是一种callback函数
***********************************************************/
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息
WPARAM wParam, // 参数1
WPARAM lParam // 参数2
)
{
switch(uMsg)
{
case WM_PAINT: /* 更新窗口消息 */
HDC hDC; /* 定义DC设备 */
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd, &ps); /* 得到设备HDC */
TextOut(hDC, 200, 0, "Visual C++ 游戏开发", strlen("Visual C++ 游戏开发"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE: /* 当单击关闭按钮时,产生关闭消息 */
if(IDYES==MessageBox(hwnd, "你真要走?", "游戏开发", MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY: /* 销毁窗口消息 */
PostQuitMessage(0);
break;
default:
// 在这里必须调用DefWindowProc,这是window内部默认的消息处理函数
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
------解决思路----------------------
你的两个窗口类名不一样,
调用CreateWindow的第一个参数改成wndcls.lpszClassName试试
------解决思路----------------------
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息
WPARAM wParam, // 参数1
WPARAM lParam // 参数2
)
------------------------------------------->
WPARAM lParam // 参数2 类型不对
LPARAM
------解决思路----------------------
你要把工程类型改成windows类型
不是console类型
------解决思路----------------------
链接错误,你把声明删除了,然后把下边的那个实现,放到main上边
------解决思路----------------------
你的函数WinSunProc 声明和定义不一致 导致链接错误,声明的最后的参数类型是LPARAM 定义里最后的参数类型是WPARAM,改成LPARAM再编译一遍
------解决思路----------------------
请楼主今后对“no matching symbolic information found.”这类提示信息眼不见为净。
请楼主以后编译链接通过后不要按F5或Ctrl+F5或点击相应按钮或菜单运行,而要按F11键运行。
------解决思路----------------------
这个函数指针的声明
LRESULT CALLBACK WinSunProc /* 声明一个回调函数 */
(
HWND hwnd, /* 窗口的句柄 */
UINT uMsg, /* 窗口的消息 */
WPARAM wParam,
LPARAM lParam
);
跟实现的参数不符合
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息
WPARAM wParam, // 参数1
WPARAM lParam // 参数2
)
------解决思路----------------------
你这个不叫运行失败,而是叫链接失败
编译、链接、运行……,是完全不同的过程,其错误含义也大相径庭
------解决思路----------------------
你这个代码有问题,当然不会出现,你仔细看一下, CreateWindow时参数中指定的窗口类名为Visual C++ Game
,但你注册的是wndcls.lpszClassName = "Visual c++ name";,改成Visual c++ Game 一样就可以了
------解决思路----------------------
建议更换更高版本的开发环境,虽然VC6轻便快捷,但微软一向都是强制升级的,兼容方便有很多问题,偶尔能用有时也可能有很多不必要的麻烦,不有太多多余无用的东西用Vs03到VS08之间的版本,2008算是最后一个比较不错的版本了,从2010开始臃肿无比。
------解决思路----------------------
建议更换更高版本的开发环境,虽然VC6轻便快捷,但微软一向都是强制升级的,兼容方便有很多问题,偶尔能用有时也可能有很多不必要的麻烦,不有太多多余无用的东西用Vs03到VS08之间的版本,2008算是最后一个比较不错的版本了,从2010开始臃肿无比。
谢谢建议。前两天刚刚下载了visual stdio 2010,有一点用着不是很舒服:那就是我在调用库里的代码时,比如输入函数名【LoadCursor】以后,再输入一个【 ( 】,这个平台却并不会给我显示参数列表,而VC6.0却可以。它不给我显示参数列表会让我很心虚啊,毕竟就是照抄代码,也不知道自己会不再哪个字母写错了。。。还有,填写完结构体类型名以后,按下【 . 】后,也不会出现该结构体里面的变量列表。。。
那是因为你缺少一个叫VAssistx的神器!