自作用の3D関数ライブラリ作る途中段階のエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
迷走のギュス

自作用の3D関数ライブラリ作る途中段階のエラー

#1

投稿記事 by 迷走のギュス » 16年前

C++を勉強し始めて2ヶ月の素人です、見よう見まねでいくつか簡単なゲーム
を作ったりしかしてないので、基礎をもっとしっかりしてから
取り組んだ方が良いと考えてたのですが、どうしても3Dゲームを作ってみたい
という一心でダイレクトXの参考書を買って自分用の3D関数ライブラリを作ろう
まで進んだのですが、途中で詰んでしまい困っています!
初めて質問するので、至らない点があるかもしれませんが、どなたかご教授願いします!

□質問内容□
関数ポインタ?msg という識別子を取り込めない原因

□実行結果□
ウィンドウの枠だけが表示される

□環境□
OS:Windows XP コンパイラ名:visual studio 2008 PE Microsoft DirectX SDK (November 2008)
リンカ入力の依存ファイル:d3d9.lib d3dx9.lib winmm.lib

□エラーの内容□
error C2065: 'msg' : 定義されていない識別子です。
error C2228: '.message' の左側はクラス、構造体、共用体でなければなりません。
型は ''unknown-type'' です。
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
□プログラムコード□
main.cpp
#include "my3dlib.h"

//-----------------------------------------------------------------------------
//WinMain関数
//-----------------------------------------------------------------------------
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
	if( SUCCEEDED( InitD3DWindow(_T("My3DLibTest"), 640, 480) ) )

    
       

            // メッセージループ
			MSG msg = {0};
            
            while( msg.message != WM_QUIT )
            {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
               
            }
        }
    }

    UnregisterClass( _T("D3D Window Class"), wc.hInstance );
    return 0;
}
my3dlib.cpp
#include "my3dlib.h"

//グローバル変数
LPDIRECT3D9         g_pD3D = NULL; 
LPDIRECT3DDEVICE9   g_pd3dDevice = NULL; 
float				g_aspect = 1.0f;

//リソースの解放
VOID Cleanup()
{
	if( g_pd3dDevice != NULL )
        g_pd3dDevice->Release();

    if( g_pD3D != NULL )
        g_pD3D->Release();
}

//ウィンドウプロシージャ
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}


//ウィンドウモードでD3D初期化
HRESULT InitD3DWindow(LPCTSTR wintitle, int w, int h){
	//ウィンドウクラス作成
	WNDCLASSEX wc =
    {
        sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L,
        GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
		_T("D3D Window Class"), NULL 
    };
    RegisterClassEx( &wc );

	//ウィンドウ作成
	 HWND hWnd = CreateWindow( _T("D3D Window Class"), wintitle,
                              WS_OVERLAPPED | WS_SYSMENU, 100, 100, w, h,
                              NULL, NULL, wc.hInstance, NULL );
	//ビューポートアスペクトの記録
	 g_aspect = (float)w / (float)h;

	//D3D9の作成
	 if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
	
	//D3Dデバイスの作成(可能ならハードウェアT&Lを使用)	
	 D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof( d3dpp ) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

	 if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
									  &d3dpp, &g_pd3dDevice ) ) ) {
	   if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
									  &d3dpp, &g_pd3dDevice ) ) ) {
    
        return E_FAIL;
	   }
	 }
	//Zバッファをオン
	 g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
	 ShowWindow( hWnd, SW_SHOWDEFAULT );

	 return S_OK;
}
my3dlib.h
#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>
#include <tchar.h>

//グローバル変数
extern LPDIRECT3D9        g_pD3D;
extern LPDIRECT3DDEVICE9  g_pd3dDevice;
extern float			  g_aspect;

//関数プロトタイプ宣言
HRESULT InitD3DWindow(LPCTSTR wintitle, int w, int h);
長くなって申し訳ありませんが、よろしくお願いします!

迷走のギュス

Re:自作用の3D関数ライブラリ作る途中段階のエラー

#2

投稿記事 by 迷走のギュス » 16年前

プログラムのミスに気がついたので編集させていただきました。

迷走のギュス

Re:自作用の3D関数ライブラリ作る途中段階のエラー

#3

投稿記事 by 迷走のギュス » 16年前

2つめの間違いに気がついたので再び編集させていただきました。
申し訳ございません!

toyo

Re:自作用の3D関数ライブラリ作る途中段階のエラー

#4

投稿記事 by toyo » 16年前

wWinMainで { が2個足りませんよ
プログラムは手を加えずにそのままコピーするのがいいです(手を加えた部分に原因があることが多いですし)
MSG msg = {0};
が別ブロックで宣言されてるような気がします

迷走のギュス

Re:自作用の3D関数ライブラリ作る途中段階のエラー

#5

投稿記事 by 迷走のギュス » 16年前

単純なミスに気がつかず
今まで四苦八苦していたのが嘘のように簡単に
ビルドが成功しました!
複雑になると単純なところのミスに気がつないもの
だと痛感しました…。
もう一度しっかりコードを見直すことで
他のミスにも気がつくことができました!

プログラムは手を加えないようにします、
アドバイスとご指摘
本当にありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る