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。使用 astd::wstringstream构造文件名:

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

如果你想存储frameName.str()使用 a的结果std::wstring

于 2012-10-29T11:02:26.097 回答
0

您不能简单地将 achar*转换为 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 回答