2010-07-12 10 views
9

¿Puede alguien ayudarme a corregir este código:Convertir char [] para LPCWSTR

char szBuff[64]; 
    sprintf(szBuff, "%p", m_hWnd); 
    MessageBox(NULL, szBuff, L"Test print handler", MB_OK); 

El error es que no puede convertir el segundo parámetro a LPCWSTR.

Respuesta

9

Para este caso específico , la solución es bastante simple:

wchar_t szBuff[64]; 
swprintf(szBuff, L"%p", m_hWnd); 
MessageBox(NULL, szBuff, L"Test print handler", MB_OK); 

Es decir, utilizar cadenas Unicode en todas partes. En general, cuando se programa en Windows, usar wchar_t y UTF-16 es probablemente el más simple. Depende de cuánta interacción tienes que hacer con otros sistemas, por supuesto.

Para el caso general, si usted tiene un archivo ASCII (o char *) de cadena, siga cualquiera WideCharToMultiByte para el caso general, o mbstowcs como señala @Matthew para los casos más simples (mbstowcs obras si la cadena está en la corriente Locale C).

+0

+1 para 'mbstowcs'! – alimg

1

Es posible que desee ver en mbstowcs, que convertirá un convencional "un byte por carácter" cadena a una cadena "múltiples bytes por carácter".

Como alternativa, cambie la configuración de su proyecto para usar cadenas de varios bytes: de forma predeterminada suelen ser cadenas "Unicode" o de "caracteres anchos" (no recuerdo el nombre de la opción exacta).

0

Si está compilando con UNICODE, haga que todas las cadenas trabaje con ancho doble, es decir, defínalas como wchar_t*.

Si realmente debe convertir ASCII a Unicode, use ATL conversion macros.

0

Dado que su etiqueta sugiere VC++, estoy sugiriendo CString. Si es así, entonces el siguiente fragmento también trabajará para su caso:

CString szBuff; 

szBuff.Format(_T("%p"), m_hWnd); 
MessageBox(NULL, szBuff, L"Test print handler", MB_OK); 
0

Usando MultiByteToWideChar() funciona para mí:

void main(int argc, char* argv[]) 
{ 
... 
wchar_t filename[4096] = {0}; 
MultiByteToWideChar(0, 0, argv[1], strlen(argv[1]), filename, strlen(argv[1])); 

// RenderFile() requires LPCWSTR (or wchar_t*, respectively) 
hr = pGraph->RenderFile(filename, NULL); 
... 
}