我实际上刚刚找到了另一个与我自己的线程相同的线程,该线程已解决,对不起,重复了。
链接到已解决的线程:DirectX unresolved external error
所以我开始在Begginer的书的帮助下尝试一些DirectX 11,尽管在我的第一次调试时我遇到了错误:S
我什至从书中逐字地复制了代码,以确保我没有犯任何愚蠢的语法错误,尽管我仍然遇到错误:
无法启动程序“ C:..... \ DXBlankWindow.exe”。该系统找不到指定的文件。
错误1:
错误LNK2019:无法解析的外部符号“长stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)”(?WndProc @@ YGJPAUHWND __ @@ IIJ @ Z)在函数_wWinMain @ 16 C:\ 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
在检查了项目的debug文件夹后,没有创建.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
,则系统只能告诉您,而实际上不做任何事情。编辑:看着重复的书,您似乎正在使用样本不完整的书。我对这本书不熟悉,但是如果这给您带来麻烦,那么您可能想再找一本书。
关于c++ - Visual Studio不创建.exe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14843437/