簡體   English   中英

LPCWSTR轉換為char *,反之亦然

[英]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 *本質上是同一件事...

不,他們不是。

如果您閱讀了文檔 ,將會看到LPCWSTRconst 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM