2

H1。コードを別の.cppファイルと.hファイルに分けて、見つけやすく、見やすく、理解しやすくしようとしています。これが私が今やろうとしていることです:私はMeshes.cppを手に入れました。これは私のメインの.cppソースファイルです。Render関数(Render() )で、SetupMatricesという名前の関数を呼び出す必要があります。

これは私の「d3dGeneral.cpp」ファイルです。

// Begining of the "d3dGeneral.cpp"
    #include "DXUT.h"

    VOID SetupMatrices( LPDIRECT3DDEVICE9 *PDev )
    {
        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveFovLH( &matProj,
                                    D3DX_PI / 4,
                                    1.777777777777778f,
                                    1.0f,
                                    1000.0f );    
        PDev->SetTransform( D3DTS_PROJECTION, &matProj ); // The problem is here......
    }
//Enging of the "d3dGeneral.cpp" 

そしてこれは私の「Meshes.cpp」ファイルです:(これはメインのcppファイルです)

// Begining of the "Meshes.cpp" file.
#include "DXUT.h"
#include "XMesh.h"
#include "Camera.h"
#include "d3dGeneral.cpp"

...
...
//Usualy SetupMatrices is found here.
...
...

VOID Render()
{
    SetupMatrices( &g_pd3dDevice );
    ...
    ...
    ...
}
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, int nCmdShow)
{
    ...
    ...
    ...
    Render();
    ...
    ...
    ...
}
// End of the "Meshes.cpp" file

DXUT.hという名前のヘッダーファイルには、他の一般的なインクルードが含まれています。したがって、これを行うとエラーが発生します。

エラー2エラーC2227:「-> SetTransform」の左側はクラス/構造体/共用体/ジェネリック型c:\ users \ catt \ desktop \ deneme \ d3dgeneral.cpp74MeshClassを指している必要があります

それが何を意味するのかは知っていますが、それを避ける方法がわかりません。ポインタに問題があるようです。また、私は次のようにPDevを使用しようとしました:

*PDev->SetTransform( D3DTS_PROJECTION, &matProj );  // ???

その関数で参照を使用してd3dDeviceを使用する必要はないことはわかっていますが、関数Cleanupもあります。コピーではなく実際のデバイス自体をクリーンアップする必要があるため、参照する必要があると思います8)。私は自分自身を正しく説明したと思います。あなたが私を助けることができればそれは恐ろしいでしょう。お時間を割いていただきありがとうございます...

4

2 に答える 2

3

これを試しましたか:

(*PDev)->SetTransform( D3DTS_PROJECTION, &matProj ); 
于 2011-06-12T12:03:21.380 に答える
2

LPDIRECT3D9DEVICEすでにポインタです。それへのポインタは必要ありません。値で取るだけLPDIRECT3D9DEVICEです。

もちろん、私は個人的にはIDirect3D9Device*、より明確であるため、を使用することを好みます。さらに、元のポインターをスマートポインターに格納するのが好きです。

于 2011-06-12T12:06:18.190 に答える