我实际上刚刚找到了另一个与我自己的线程相同的线程,该线程已解决,对不起,重复了。

链接到已解决的线程: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/

10-09 02:28