【发布时间】:2017-02-05 13:13:18
【问题描述】:
我正在使用 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 行,我收到变量文件名的错误:
IntelliSense:“char *”类型的参数与“LPCWSTR”类型的参数不兼容
在尝试使用 MessageBox 时,我在第二个和第三个参数处也得到了完全相同的错误消息:
if (d3ddev == NULL)
{
MessageBox(hWnd, "Error Creating Direct3D Device", "Error", MB_ICONERROR);
return 0;
}
我以前使用过完全一样的代码并且没有任何问题。不知道发生了什么——尤其是因为 LPCWSTR 和 char* 本质上是一回事......
任何帮助表示赞赏!谢谢
【问题讨论】:
-
LPCSTR 和 char* 我可能同意,但 LPCWSTR?没有。
-
不知道发生了什么——尤其是因为 LPCWSTR 和 char 本质上是一回事。* -- 不,它们不是跨度>
-
This Q/A 可能会回答您的问题。 (查看第二个答案,更改项目配置,使 API 不需要 unicode)。
-
现代 C++ 应用程序都使用 Unicode(又名宽字符或
wchar_t)。旧 ANSI (ASCII) 接口仍然存在,但可以追溯到 Windows 3.x。实际上,您仍然会故意选择 ANSI API 的唯一情况是用于调试输出(因为它从未本地化),例如OutputDebugStringA。在包含任何标题之前使用#define _UNICODE和#define UNICODE。 -
说到“现代 C++”,您为什么使用旧版 Direct3D 9 和已弃用的 D3DX 库而不是 Direct3D 11?见MSDN 和Living without D3DX。
标签: c++ char type-conversion directx-9 lpcwstr