所以我正在尝试进行一些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;
}
答案 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>