error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
【摘要】 问题描述:
最近在学习MFC,学习windows的API函数。
在按网络上的视频教程用全手写的方式创建窗口的时候出现Bug。
源码:
#include <Windows.h> HINSTANCE hinst;//实例句柄太重要了,要用一个全局变量将其保存起来HWND hwnd; LRESULT CALL...
问题描述:
最近在学习MFC,学习windows的API函数。
在按网络上的视频教程用全手写的方式创建窗口的时候出现Bug。
源码:
-
#include <Windows.h>
-
-
HINSTANCE hinst;//实例句柄太重要了,要用一个全局变量将其保存起来
-
HWND hwnd;
-
-
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
-
-
-
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
-
{
-
//定义窗口类
-
WNDCLASSEX wcx;
-
MSG msg;
-
BOOL fGotMessage;
-
-
hinst=hinstance;
-
wcx.lpszClassName = "MainWClass";
-
-
wcx.cbSize = sizeof(wcx);
-
-
wcx.style = CS_HREDRAW | CS_VREDRAW;
-
wcx.lpfnWndProc = MainWndProc;
-
wcx.cbClsExtra = 0;
-
wcx.cbWndExtra = 0;
-
wcx.hInstance = hinstance;
-
wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
-
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
-
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
-
wcx.lpszMenuName = NULL;
-
wcx.hIconSm = (HICON)LoadImage(hinstance,
-
MAKEINTRESOURCE(5),
-
IMAGE_ICON,
-
GetSystemMetrics(SM_CXSMICON),
-
GetSystemMetrics(SM_CYSMICON),
-
LR_DEFAULTCOLOR);
-
if(!RegisterClassEx(&wcx))
-
{
-
return 1;
-
}
-
-
//使用窗口类创建窗口
-
-
hwnd = CreateWindow("MainWClass",
-
"Hello!",
-
WS_OVERLAPPEDWINDOW,
-
CW_USEDEFAULT,
-
CW_USEDEFAULT,
-
CW_USEDEFAULT,
-
CW_USEDEFAULT,
-
(HWND)NULL,
-
(HMENU)NULL,
-
hinstance,
-
(LPVOID)NULL);
-
-
if(!hwnd)
-
{
-
return 1;
-
}
-
-
ShowWindow(hwnd,nCmdShow);
-
UpdateWindow(hwnd);//ShowWindow之后要马上UpdateWindow一下,否则窗口显示不出来
-
-
while((fGotMessage = GetMessage(&msg,(HWND)NULL,0,0)) != 0)
-
{
-
TranslateMessage(&msg);
-
DispatchMessage(&msg);
-
}
-
-
return msg.wParam;
-
}
-
-
//窗口过程函数,处理消息
-
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
-
{
-
switch(uMsg)
-
{
-
case WM_DESTROY:
-
PostQuitMessage(0);
-
return 0;
-
case WM_LBUTTONDOWN:
-
MessageBox(hwnd,"Hello 窗口!","你好",MB_OK);
-
return 0;
-
default:
-
return DefWindowProc(hwnd,uMsg,wParam,lParam);
-
}
-
}
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>生成启动时间为 2017/1/1 星期日 16:01:39。
1>InitializeBuildStatus:
1> 正在创建“Debug\test.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> 所有输出均为最新。
1>ManifestResourceCompile:
1> 所有输出均为最新。
1>Link:
1> 所有输出均为最新。
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
1>C:\Users\Administrator\Documents\Visual Studio 2010\Projects\test\Debug\test.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:00.34
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
问题分析:
因为Win32 console Application的入口函数是Main(),而Win32 Application的入口函数才是WinMain()
解决方案:
右键项目,打开【属性】页,【 配置属性】——【 链接器】——【 系统】中的【 子系统】改为【 窗口 (/SUBSYSTEM:WINDOWS)】 ,如下图所示:
再次编译即可过通过测试!
文章来源: blog.csdn.net,作者:allinallinallin,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/to_Baidu/article/details/53966619
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)