0

私は実際に、解決済みの別のスレッドを見つけました。重複して申し訳ありません。

解決済みスレッドへのリンク: DirectX 未解決の外部エラー

それで、初心者向けの本の助けを借りてDirectX 11を試し始めましたが、最初のデバッグでエラーが発生しました:S

まだエラーが発生していますが、愚かな構文エラーを犯していないことを確認するために、本からコードを一語一句コピーしました。

プログラム 'C:.....\DXBlankWindow.exe' を開始できません。システムは、指定されたファイルを見つけることができません。

エラー 1:

エラー LNK2019: 未解決の外部シンボル "long 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

また、プロジェクトのデバッグ フォルダーを確認した後、.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.
4

1 に答える 1

2
// Define WndProc
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );

いいえ、それは を定義していません。それはWndProc宣言し WndProcています。つまり、コードの残りの部分にWndProcどこかに があることを伝えるのでwndClass.lpfnWndProc = WndProc;、コンパイル エラーは発生しません。あなたが本当に持っていることを確認するのはあなた次第ですWndProc。それが、リンカのエラー メッセージが伝えようとしているものです。

または、もっと簡単に言えば、WndProcそこにない a を使用するようにシステムに指示すると、システムは実際には何もできなくなります。

編集:複製を見ると、サンプルが不完全な本を使用しているようです。私はその本に詳しくありませんが、それで問題が発生する場合は、別の本を探すことをお勧めします。

于 2013-02-12T23:05:09.407 に答える