一个简单Windows程序无法链接,求大神指导,感谢

// HelloWin.C 在客户区显示“你好 Windows 7” (c) Charles Petzold, 1998

#include

#pragma comment(lib,"winmm.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)
{
。。。
}

先申明一下winproc函数。

LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); 这个算吗,还需其他声明吗?

直接在VC++中新建win32项目,有模板

感谢,用他自带的向导是没有问题的,那以前的Win32写法还能通过编译吗?

Charles Petzold, 1998,多少年前的东西,用的VC++版本都不同

估计6.0没问题,没试过,就想看看win7能不能搞定:-D,win98的东西了,难道win7还过不了这坎?

况且用向导生成的是MFC框架,我对MFC不太感冒,尽管MFC还是比较方便的。:-D

能帮我看看link命令行有生命问题吗?谢谢。
/OUT:"D:\Documents\Visual Studio 2012\Projects\HelloWin2012\Debug\HelloWin2012.exe" /MANIFEST /NXCOMPAT /PDB:"D:\Documents\Visual Studio 2012\Projects\HelloWin2012\Debug\HelloWin2012.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"D:\Documents\Visual Studio 2012\Projects\HelloWin2012\Debug\HelloWin2012.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\HelloWin2012.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

如果把WinProc的指针置为NULL,编译和链接就都没有问题了,估计问题出在WinProc指针

话说我没看出来有问题。。
如果非要说有问题,那么就把每个函数前加上extern "C"试试,手头没电脑也没法调试,不过这种写法是没有问题的,VS2013都没事,win32是Windows用户态的核心,MFC基于win32,.NET最终也得经过win32,就连微软极力推荐的Metro应用和所谓的UWP在x86和x86-64上还是基于win32。所以win32编程技术虽然不流行了,但是他会作为底层一直存在下去

wndclass.lpfnWndProc = WinProc;

把WndProc改为WinProc,方便点。

感谢各位大神鼎力支持,最终编译通过,原来是函数名搞错了,粗心阴险的错误 :-D, 非常感谢。