2

私は C++ でいくつかの問題を抱えています..ファイル名をタイムスタンプとしてフレームを保存しようとしていますが、成功しません。誰か助けてもらえますか?

私が使用すると、適切に保存されます:

D3DXSaveTextureToFileW((LPCWSTR)"file.bmp",D3DXIFF_BMP,tex,NULL);また

D3DXSaveTextureToFileW(L"file.bmp", frameName,D3DXIFF_BMP,tex,NULL); 

しかし、もっと精巧なファイル名を試してみると、いくつかの問題が発生し、コンパイルされますが、ファイルは保存されません...

私は次のようなものを使用しようとしています

LPCWSTR frameName;
std::string s = std::string("file") + std::string(".bmp");
frameName = (LPCWSTR)s.c_str();
D3DXSaveTextureToFileW((LPCWSTR)frameName,D3DXIFF_BMP,tex,NULL);

保存しません...そして、保存したいようなことをしようとすると、問題が続きます:

time_t seconds;
seconds = time (NULL);      
time_t rawtime;
time ( &rawtime );

LPCWSTR frameName;
std::string s = std::string("file") + std::string(&rawtime);
frameName = (LPCWSTR)s.c_str();

D3DXSaveTextureToFileW((LPCWSTR)frameName,D3DXIFF_BMP,tex,NULL);
4

2 に答える 2

3

std::string::c_str()(a const char*)の結果を a にキャストすることはできませんLPCWSTR。a を使用しstd::wstringstreamてファイル名を作成します。

#include <sstream>
...
std::wstringstream frameName;
frameName << L"file" << rawtime << L".bmp";
D3DXSaveTextureToFileW(frameName.str().c_str(),D3DXIFF_BMP,tex,NULL);

frameName.str()使用結果を保存する場合は、 std::wstring.

于 2012-10-29T11:02:26.097 に答える
0

char*aを a に単純にキャストすることはできませんwchar_t*。それでは十分じゃない。テキストを 8 ビット エンコードから 16 ビット エンコードに変換する必要があります。

とはいえ、プログラムで ANSI 文字列を使用しているように見えるので、使いやすいかもしれませんD3DXSaveTextureToFileA

例えば:

std::string s = std::string("file") + std::string(".bmp");
D3DXSaveTextureToFileA(s.c_str(),D3DXIFF_BMP,tex,NULL);

とはいえ、これがプロ向けのソフトウェアである場合は、アプリケーション全体で UNICODE テキストを使用することをお勧めします。その場合、次のようにします。

std::wstring s = std::wstring(L"file") + std::wstring(L".bmp");
D3DXSaveTextureToFileW(s.c_str(),D3DXIFF_BMP,tex,NULL);
于 2012-10-29T11:05:02.413 に答える