0

DirectX9 を使用した単純なプロジェクトに取り組んでいます。データ型の変換に少し問題があり、調査を行いましたが、特に役立つものは見つかりませんでした。コードから始めましょう:

LPDIRECT3DSURFACE9 LoadSurface(char *fileName, D3DCOLOR transColor)
{
LPDIRECT3DSURFACE9 image = NULL;
D3DXIMAGE_INFO info;
HRESULT result;

result = D3DXGetImageInfoFromFile(fileName, &info);
if (result != D3D_OK) return NULL;

result = d3ddev->CreateOffscreenPlainSurface(
    info.Width,         //width of the surface 
    info.Height,        //height of the surface
    D3DFMT_X8R8G8B8,    //surface format
    D3DPOOL_DEFAULT,    //memory pool use
    &image,             //reference to image
    NULL);              //reserved - ALWAYS NULL

//make sure file loaded properly
if (result != D3D_OK) return NULL;

return image;

}

6 行目で、変数 fileName のエラーが発生しています。

IntelliSense: 型 "char *" の引数は、型 "LPCWSTR" のパラメーターと互換性がありません

MessageBox を使用しようとすると、2 番目と 3 番目のパラメーターでもまったく同じエラー メッセージが表示されます。

if (d3ddev == NULL)
{
MessageBox(hWnd, "Error Creating Direct3D Device", "Error", MB_ICONERROR);
return 0;
}

私は以前にこのようなコードを使用したことがありますが、問題はありませんでした。何が起こっているのかわかりません - 特に LPCWSTR と char* は本質的に同じものなので...

どんな助けでも大歓迎です!! ありがとうございました

4

3 に答える 3

5

以前は問題がなかった最も可能性の高い理由は、Visual C++ プロジェクトの設定で Unicode をオンにしたことです。ここで受け入れられた回答を参照して、再度オフにします (可能であれば): VC++ プロジェクトで Unicode をオフにするにはどうすればよいですか?

それ以外の場合は、 MultiByteToWideChar 関数char *wchar_t *使用するように変換する必要があります。

于 2016-09-27T19:18:24.140 に答える
3

私は以前にこのようなコードを使用したことがありますが、問題はありませんでした。

いいえ、していません。

LPCWSTR と char* は本質的に同じものです...

いいえ、そうではないです。

ドキュメントを読むと、 aLPCWSTRが であることがわかりますconst wchar_t*

const wchar_t*代わりに、関数にa を使用する必要があります。

本当にに変換したいが、char*(少なくとも 2 つの方向のいずれかで) これが意味をなさないことを気にしない場合は、次の質問に対する回答を読むことができます。

…そして、const_cast後で適用します。しかし、真剣に、しないでください。

于 2016-09-27T19:14:11.427 に答える