2016-09-27 3 views
0

나는 DirectX9로 간단한 프로젝트를 진행하고있다. 데이터 유형 변환에 약간의 걸림돌이 있습니다. 몇 가지 조사를 해봤지만 특별히 유용한 것은 없습니다. 의 코드부터 시작하자 :LPCWSTR char * 및 그 반대로

라인 6에서
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; 

} 

, 내가 변수 파일 이름 오류를 받고 있어요 :

인텔리 : 유형 "의 char *"의 인수가 "LPCWSTR"유형의 매개 변수와 호환되지 않습니다

메시지 박스의 사용하려고 할 때 나는 또한 두 번째와 세 번째 매개 변수에 동일한 오류 메시지가

: 정확히 BEF처럼 내가 사용한 적이

if (d3ddev == NULL) 
{ 
MessageBox(hWnd, "Error Creating Direct3D Device", "Error", MB_ICONERROR); 
return 0; 
} 

코드를 광석과 아무런 문제가 없었다. 무슨 일이 벌어지고 있는지 전혀 알지 못합니다. 특히 LPCWSTR과 char *는 본질적으로 같은 것이기 때문에 ...

어떤 도움을 주시면 감사하겠습니다! 고마워요

+1

LPCSTR 및 char * i가 동의 할 수도 있지만 LPCWSTR? 아니. – Borgleader

+6

* LPCWSTR과 char *가 본질적으로 동일하기 때문에 어떤 일이 벌어지는 지 알지 못합니다. * - ** 아니요, 그들은 ** – PaulMcKenzie

+1

[이 Q/A] (http://stackoverflow.com/questions)가 아닙니다./3924926/can-convert-parameter-1-char-to-lpcwstr? rq = 1) 질문에 대한 답변을 얻을 수 있습니다. (두 번째 대답을보고, API가 유니 코드를 기대하지 않도록 프로젝트 구성을 변경하십시오.) – alain

답변

4

이전에 문제가 없었던 가장 큰 이유는 Visual C++ 프로젝트 설정에서 유니 코드를 켰다는 것입니다. (당신을 위해 가능하다면) 다시 해제하려면 여기를 허용 대답을 참조하십시오 How do I turn off Unicode in a VC++ project?

그렇지 않으면 당신이 MultiByteToWideChar function를 사용 wchar_t *char * 변환해야합니다.

3

저는 이전과 똑같은 코드를 사용했지만 문제가 없었습니다.

아니요.

LPCWSTR와의 char * 아니, 그들은 아니에요 ... 기본적으로

같은 일이다.

the documentation을 읽으면 LPCWSTRconst wchar_t*입니다.

대신 함수에 const wchar_t*을 가져 가야합니다.

당신이 정말이 다음 다음과 같은 질문에 대한 답변을 읽을 수있는, 말이없는 char*로 변환 할, 그리고 (적어도 두 방향 중 하나) 그 마음을하지 않는 경우 :

  • How to convert char* to LPCWSTR?
  • 중 & hellip

    1

    DirectX 헤더 파일을 조사하여 알아 냈습니다.

    MessageBoxA(handleVar, messageVar, titleVar, iconType);  
    

    사용 ... *이 함께 제공

    D3DXGetImageInfoFromFileA(varName, &info); 
    

    같은이 메시지 박스의 간다 : 대신 사용

    D3DXGetImageInfoFromFile(varName, &info); 
    

    : 사람이 같은 문제가보다는를 사용하는 경우 문자 집합에 대한 프로젝트 속성 설정이 유니 코드로 설정된 경고. 멀티 바이트로 전환하면 불필요하게됩니다.

    언제나 그렇듯이 실제로 기여한 사람 덕분에 이것으로 나를 도왔습니다. 단순히 경험이없는 사람들을 비웃거나 비난하는 게시판에 게시하는 사람들에게 감사드립니다. 시간을 많이 사용하십시오.

    +3

    예, 작동하지만 잘못된 생각입니다. 'char' API가 사용되도록 프로젝트 설정을 변경하십시오. ('D3DXGetImageInfoFromFile'은'UNICODE'에 의존하여'D3DXGetImageInfoFromFileW' 또는'D3DXGetImageInfoFromFileA'로 해석되는 매크로입니다) – alain

    +1

    Win32 API의'xyzA' narrow 버전을 명시 적으로 사용하려는 이유를이 답변에 추가해야한다고 생각합니다 와이드 버전 또는 게시되고 문서화 된 이름. – Niall

    +0

    누군가 지적했듯이 프로젝트 설정은 멀티 바이트보다는 유니 코드로 설정되었습니다. 용서해주세요. - DirectX를 사용한 이후로 거의 1 년이되었습니다 ... 저는 설정에서해야하는 모든 작은 조정 사항을 기억하고 있습니다. 신기한 실수. 모두 도움을 주셔서 감사합니다! –