DirectX未解决外部错误

时间:2012-07-25 21:48:24

标签: c++ directx external

所以我正在尝试进行一些directX编程,因此我正在阅读这本名为“Beginning DirectX 11 Game Programming”的书,但我已经陷入了第二个例子。

我花了大约一个小时寻找这个问题的解决方案,但却找不到任何可以帮助我的东西。

所以我得到的错误代码就是这个。:

Main.obj : error LNK2019: unresolved external symbol "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) referenced in function _wWinMain@16

这是代码 - 完全按照书中所写,除了LRESULT CALLBACK WndProc

#include <Windows.h>

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow )
{
    UNREFERENCED_PARAMETER( prevInstance );
    UNREFERENCED_PARAMETER( cmdLine );

    WNDCLASSEX wndClass = { 0 };
    wndClass.cbSize = sizeof( WNDCLASSEX );
    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.hInstance = hInstance;
    wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
    wndClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = "DX11BookWindowClass";

    if( !RegisterClassEx( &wndClass ) )
        return -1;

    RECT rc = { 0,0,640,480 };
    AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );

    HWND hwnd = CreateWindowA( "DX11BookWindowClass", "Blank Win32 Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
                                rc.bottom - rc.top, NULL, NULL, hInstance, NULL );

    if( !hwnd )
        return -1;

    ShowWindow( hwnd, cmdShow );

    return 0;
}

4 个答案:

答案 0 :(得分:4)

如果您没有处理任何消息,则从您的0回调 IS 返回WndProc一个可怕的想法。因此,您可以将其定义为自己处理消息,或者只使用默认过程:

wndClass.lpfnWndProc = DefWindowProc;

可替换地:

LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc(hWnd, msg, wParam, lParam); }

每当您不处理邮件时,您应该这样做。

答案 1 :(得分:0)

你永远不会定义

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

的任何地方。 @RomanR。有一个完美的答案,我同意这是一个糟糕的解决方案。回到第一个练习,看看它是否没有实现。

答案 2 :(得分:0)

当我们讨论DirectX时,将WndProc定义为DefWindowProc不是解决方案。大量用户在窗口模式下运行游戏,这意味着您可以让程序更新XMMatrixPerspectiveFovLH的宽高比,更改缓冲区的分辨率,并在窗口调整大小时更新视口。稍后如果你想要避免DirectInput,你可以简单地使用窗口消息WM_MOUSEMOVE; WM_LBUTTONDOWN; WM_LBUTTONUP等来管理你的鼠标和键盘状态 - 因为许多人仍然讨厌dinput8。

答案 3 :(得分:0)

我在跟随同一本书时犯了同样的错误,如果你在图2.4之后阅读,你会注意到它实际上为你回答了这个问题,并且有一个关于windows回调程序的整个小节。 / p>