问题描述
- 一个简单Windows程序无法链接,求大神指导,感谢
- // HelloWin.C 在客户区显示“你好 Windows 7” (c) Charles Petzold 1998
#include
#pragma comment(libwinmm.lib"")
LRESULT CALLBACK WinProc(HWND UINT WPARAM LPARAM);
int WINAPI WinMain(HINSTANCE hInstance HINSTANCE hPrevInstance PSTR szCmdLine int iCmdShow)
{
static TCHAR szAppName[] = TEXT(""HelloWin"");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WinProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;if (!RegisterClass(&wndclass)){ MessageBox(NULL TEXT(""This program require Windows NT!"") szAppName MB_ICONERROR); return 0;}hwnd = CreateWindow(szAppName TEXT(""你好程序"") WS_OVERLAPPEDWINDOW CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT NULL NULL hInstance NULL);ShowWindow(hwnd iCmdShow);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)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;switch (message){case WM_CREATE: PlaySound(TEXT(""Windows Startup.wav"") NULL SND_FILENAME | SND_ASYNC); return 0;case WM_PAINT: hdc = BeginPaint(hwnd &ps); GetClientRect(hwnd &rect); DrawText(hdc TEXT(""你好,Windows 7!"") -1 &rect DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd &ps); return 0;case WM_DESTROY: PostQuitMessage(0); return 0;}return DefWindowProc(hwnd message wParam lParam);
}
Error 1 error LNK2019: unresolved external symbol _WinProc@16 referenced in function _WinMain@16
vs2102 win32项目无法通过,求大神指导,谢谢
解决方案
你把函数名搞错了,前后要一致。
LRESULT CALLBACK WinProc(HWND UINT WPARAM LPARAM);
。。。
LRESULT CALLBACK WndProc(HWND hwnd UINT message WPARAM wParam LPARAM lParam)
{
。。。
}
解决方案二:
直接在VC++中新建win32项目,有模板
解决方案三:
话说我没看出来有问题。。
如果非要说有问题,那么就把每个函数前加上extern ""C""试试,手头没电脑也没法调试,不过这种写法是没有问题的,VS2013都没事,win32是Windows用户态的核心,MFC基于win32,.NET最终也得经过win32,就连微软极力推荐的Metro应用和所谓的UWP在x86和x86-64上还是基于win32。所以win32编程技术虽然不流行了,但是他会作为底层一直存在下去
解决方案四:
wndclass.lpfnWndProc = WinProc;
把WndProc改为WinProc,方便点。
解决方案五:
先申明一下winproc函数。
解决方案六:
LRESULT CALLBACK WinProc(HWND UINT WPARAM LPARAM); 这个算吗,还需其他声明吗?
解决方案七:
感谢,用他自带的向导是没有问题的,那以前的Win32写法还能通过编译吗?
解决方案八:
Charles Petzold 1998,多少年前的东西,用的VC++版本都不同
解决方案九:
估计6.0没问题,没试过,就想看看win7能不能搞定:-D,win98的东西了,难道win7还过不了这坎?
解决方案十:
况且用向导生成的是MFC框架,我对MFC不太感冒,尽管MFC还是比较方便的。:-D