[英]LPCWSTR to char* and vice versa
我正在使用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 *本質上是同一件事...
任何幫助表示贊賞! 謝謝
您之前沒有問題的最可能原因是您在Visual C ++項目的設置中打開了unicode。 請參閱此處接受的答案以再次將其關閉(如果可能的話): 如何在VC ++項目中關閉Unicode?
否則,您需要使用MultiByteToWideChar函數將char *
轉換為wchar_t *
。
我以前使用過完全像這樣的代碼,沒有任何問題。
不,你沒有。
LPCWSTR和char *本質上是同一件事...
不,他們不是。
如果您閱讀了文檔 ,將會看到LPCWSTR
是const wchar_t*
。
您應該改為將const wchar_t*
放入函數中。
如果您真的想轉換為char*
,並且不介意(至少在兩個方向之一)這沒有任何意義,那么您可以閱讀以下問題的答案:
…,然后再應用const_cast
。 但是,嚴重的是,請不要這樣做。
通過查看DirectX頭文件找出了答案...如果有人遇到同樣的問題,請使用:
D3DXGetImageInfoFromFile(varName, &info);
而是使用:
D3DXGetImageInfoFromFileA(varName, &info);
MessageBox的也是如此...使用
MessageBoxA(handleVar, messageVar, titleVar, iconType);
*這帶有一個警告,將字符集的項目屬性設置設置為Unicode。 如果將其切換為“多字節”,則沒有必要。
一如既往,感謝那些為我提供了實際幫助的人; 不用了,因為那些只是在董事會上張貼以嘲笑或貶低那些經驗不足的人的人-善用您的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.