我正在使用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时,我在第二个和第三个参数上也得到完全相同的错误消息:
if (d3ddev == NULL)
{
MessageBox(hWnd, "Error Creating Direct3D Device", "Error", MB_ICONERROR);
return 0;
}
我之前使用的代码完全相同,没有问题。不知道发生了什么 - 特别是因为LPCWSTR和char *本质上是一样的......
任何帮助表示赞赏!!谢谢
答案 0 :(得分:4)
之前没有问题的最可能原因是您在Visual C ++项目的设置中打开了unicode。请在此处查看已接受的答案以将其关闭(如果可能的话): How do I turn off Unicode in a VC++ project?
否则,您需要使用MultiByteToWideChar function将char *
转换为wchar_t *
。
答案 1 :(得分:3)
我之前使用的代码完全相同,没有任何问题。
不,你没有。
LPCWSTR和char *本质上是一样的......
不,他们不是。
如果您阅读the documentation,则会发现LPCWSTR
是const wchar_t*
。
您应该将const wchar_t*
改为您的功能。
如果真的想要转换为char*
,并且不介意(至少在两个方向中的一个方向)这没有任何意义,那么你可以阅读以下问题的答案:
...然后申请const_cast
。但是,说真的,请不要。
答案 2 :(得分:1)
通过查看DirectX头文件来计算出来...如果有人遇到同样的问题,而不是使用:
D3DXGetImageInfoFromFile(varName, &info);
相反,请使用:
D3DXGetImageInfoFromFileA(varName, &info);
MessageBox'同样如此......使用
MessageBoxA(handleVar, messageVar, titleVar, iconType);
*需要注意的是,字符集的项目属性设置设置为Unicode。如果将其切换为多字节,则不需要。
一如既往,感谢那些真正贡献并帮助我的人;并且感谢那些只是在董事会上发帖嘲笑或贬低那些经验不足的人 - 充分利用你的时间。