实际上,我刚刚发现了另一个与我自己的线程相同的线程,该线程已经解决,很抱歉重复。
链接到已解决的线程:DirectX未解决的外部错误
因此,我开始在Begginer的书的帮助下尝试一些DirectX 11,尽管在我的第一次调试中我遇到了错误:s
我甚至逐字逐句地从书中复制了代码,只是为了确保我不会犯任何愚蠢的语法错误,尽管我仍然会得到错误:
无法启动程序"C:….."。。。。。\DXBlankWindow.exe'。系统找不到指定的文件。
错误1:
错误LNK2019:未解析的外部符号"longstdcall WndProc(struct HWND*,unsigned int,unsignedint,long)"(?WndProc@@YGJPAUHWND__@@IIJ@Z)在函数中引用_wWinMain@16C:\Users\Tim\Documents\Visual Studio 2010\Projects\DirectXTuts\DXBlankWindow\DXBlankWindow\main.obj
错误2:
错误LNK1120:1未解析的外部C:\Users\Tim\Documents\Visual Studio 2010\Projects\DirectXTuts\DXBlankWindow\Debug\DXBlankWindow.exe 1
检查项目调试文件夹后,没有创建.exe文件。
我还运行了一个简单的程序来检查项目是否会运行,它做得很好,并创建了.exe文件,我还将运行库更改为"多线程调试(/MTd)"。
我可能做了一些非常基本、非常简单的错误,但我一辈子都无法弄清楚是什么。如有任何帮助,我们将不胜感激。我想除了下面的代码之外没有什么好说的了:
#include<Windows.h>
// Define WndProc
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
// Program Entry Point
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow )
{
// Define unused parameters
UNREFERENCED_PARAMETER( prevInstance );
UNREFERENCED_PARAMETER( cmdLine );
// Define Window variables
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";
// Check if wndClass is being registered, if not error.
if( !RegisterClassEx( &wndClass ) )
return -1;
// Create a RECT to hold the screen positions
RECT rc = { 0, 0, 640, 480 };
AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );
// Create The Window through ANSI
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 );
// Demo Initialize
MSG msg = { 0 };
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
// Update
// Draw
}
// Demo Shutdown
return static_cast<int>( msg.wParam );
}
Thanks again.
// Define WndProc LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
不,它没有定义WndProc
,声明WndProc
。换句话说,这告诉代码的其余部分某个地方有WndProc
,这样wndClass.lpfnWndProc = WndProc;
就不会导致编译错误。这取决于你是否真的拥有WndProc
。这就是链接器错误消息试图告诉您的内容。
或者,简单地说,如果你告诉系统使用不存在的WndProc
,系统除了告诉你之外,什么都做不了。
编辑:看着复制品,你似乎在用一本样本不完整的书。我不熟悉这本书,但如果这给你带来麻烦,你可能想再找一本。