2011-11-08 8 views
5

Dodatkowe informacje im budowania aplikacji, które wykorzystują WinHttpOpenRequest Api co wymaga LPCWSTR do nazwy obiektu i IM za pomocą Visual Studio 2008Jak przekonwertować z LPCSTR do LPCWSTR w C++

+0

Dlaczego nie używasz szerokich ciągów znaków w całej aplikacji? – tenfour

+0

możliwy duplikat [Co LPCWSTR oznacza i jak należy z nim postępować?] (Http://stackoverflow.com/questions/2230758/what-does-lpcwstr-stand-for-and-how-should-it- be-handled-with) –

Odpowiedz

11

Najprostszym sposobem jest użycie 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; 
} 

Any pamięci przydzielonej przez A2W (ANSI do Wide) zostanie zwolniona, gdy wyjść funkcyjnych.

+2

Te makra ATL 3.0 zostały zastąpione przez wersję 7.0 [Makra konwersji ATL i MFC] (http://msdn.microsoft.com/en-us/library/87zae4a3.aspx) ponad dekadę temu. Między innymi makra ATL 7.0 nie wymagają już użycia makro "USES_CONVERSION". Dodatkowo możesz użyć wariantów poprawnych const, np. w twoim przykładzie: 'CA2W (a)'. – IInspectable

4

Converting from char * ma ładny próbki

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; 

Ale jak wspomniano dziesięć razy. Użyj generic text mapping jeśli to możliwe

Powiązane problemy