1

それで、私はいくつかのdirectXプログラミングに取り掛かろうとしているので、「Beginning DirectX 11ゲームプログラミング」と呼ばれるこの本をフォローしていますが、私はすでに2番目の例で立ち往生しています。

私はこの問題の解決策を探すのにおよそ1時間費やしましたが、私を助けることができるものを見つけることができませんでした。

だから私が得ているエラーコードはこれです。

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;
}
4

4 に答える 4

4

メッセージを処理していない場合、コールバック0から戻るのはひどい考えです。したがって、メッセージを自分で処理するように定義するか、デフォルトの手順を使用することができます。WndProc

wndClass.lpfnWndProc = DefWindowProc;

または:

LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc(hWnd, msg, wParam, lParam); }

メッセージを処理しないときはいつでもこれを行う必要があります。

于 2012-07-25T22:06:37.313 に答える
0

あなたは決して定義しません

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

どこでも。@RomanR。完璧な答えがあり、それが悪い解決策であることに同意します。最初の演習に戻って、実装がないかどうかを確認してください。

于 2012-07-25T21:57:43.170 に答える
0

DefWindowProcDirectXについて説明しているときは、WndProcをソリューションとして定義することはできません。多くのユーザーがウィンドウモードでゲームを実行しますXMMatrixPerspectiveFovLH。つまり、ウィンドウのサイズが変更された場合に、アスペクト比を更新したり、バッファの解像度を変更したり、ビューポートを更新したりする可能性をプログラムで実行できます。また、後でDirectInput自体を避けたい場合は、ウィンドウメッセージWM_MOUSEMOVE; WM_LBUTTONDOWN; WM_LBUTTONUPなどを使用して、マウスとキーボードの状態を管理できます。多くの場合、dinput8は依然として嫌われています。

于 2012-07-29T16:53:57.860 に答える
0

この同じ本を読んでいるときに同じ間違いを犯しました。図2.4の後で読むと、実際に質問に答えており、Windowsのコールバック手順に関するサブセクション全体があります。

于 2013-02-12T23:17:19.587 に答える