2011-11-08 11 views
5

informazioni aggiuntive im costruzione di un'applicazione che utilizza il WinHttpOpenRequest Api che richiede LPCWSTR per il nome dell'oggetto e im utilizzando Visual Studio 2008come convertire da LPCSTR a LPCWSTR in C++

+0

Perché non utilizzi stringhe di caratteri larghi in tutta l'app? – tenfour

+0

possibile duplicato di [Cosa significa LPCWSTR e come deve essere gestito?] (Http://stackoverflow.com/questions/2230758/what-does-lpcwstr-stand-for-and-how-should-it- essere-gestiti-con) –

risposta

11

Il modo più semplice è quello di utilizzare ATL:

#include <Windows.h> 
#include <atlbase.h> 
#include <iostream> 

int main(int argc, char *argv[]) { 
    USES_CONVERSION; 
    LPCSTR a = "hello"; 
    LPCWSTR w = A2W(a); 
    std::wcout << w << std::endl; 
    return 0; 
} 

Qualunque memoria allocata da A2W (ANSI per Wide) verranno liberati quando la funzione termina.

+2

Quelle macro ATL 3.0 sono state sostituite dalla versione 7.0 [ATL e MFC Conversione macro] (http://msdn.microsoft.com/en-us/library/87zae4a3.aspx) più di un decennio fa. Tra l'altro, le macro ATL 7.0 non richiedono più l'uso della macro 'USES_CONVERSION'. Inoltre, puoi utilizzare le varianti const-correct, ad es. nel tuo esempio: 'CA2W (a)'. – IInspectable

4

Converting from char * ha un campione bel

char *orig = "Hello, World!"; 
cout << orig << " (char *)" << endl; 

// Convert to a wchar_t* 
size_t origsize = strlen(orig) + 1; 
const size_t newsize = 100; 
size_t convertedChars = 0; 
wchar_t wcstring[newsize]; 
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 
wcscat_s(wcstring, L" (wchar_t *)"); 
wcout << wcstring << endl; 

Ma come dieci volte menzionato. Utilizzare generic text mapping se possibile