JAK: Konwertowanie ciągu System::String* na char* w programie Visual C++ .NET

Ten artykuł został opublikowany wcześniej pod numerem PL311259
Streszczenie
W tym artykule omówiono kilka sposobów konwertowania ciągu System::String* na char* przy użyciu zarządzanych rozszerzeń w programie Visual C++ .NET.

Metoda 1

PtrToStringCharsto funkcja, która zwraca wewnętrzny wskaźnik do rzeczywistego obiektu String. Jeśli przekazujesz ten wskaźnik do wywołania funkcji niezarządzanej, najpierw musisz „unieruchomić” ten wskaźnik, aby zapewnić, że obiekt nie zmieni lokalizacji w trakcie procesu asynchronicznego czyszczenia pamięci:
//#include <vcclr.h>System::String * str = S"Hello world\n";const __wchar_t __pin * str1 = PtrToStringChars(str);wprintf(str1);	

Metoda 2

StringToHGlobalAnsito metoda, która kopiuje zawartość zarządzanego obiektu String na jego macierzystą stertę, a następnie konwertuje go w przelocie na format ANSI (American National Standards Institute). Ta metoda przydziela wymaganą pamięć macierzystej sterty:
//using namespace System::Runtime::InteropServices;System::String * str = S"Hello world\n";char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);printf(str2);Marshal::FreeHGlobal(str2);

Metoda 3

Klasa VC7CStringzawiera konstruktora, który bierze zarządzany wskaźnik String i ładuje obiekt typu CString z jego zawartością:
//#include <atlstr.h>System::String * str = S"Hello world\n";CString str3(str); printf(str3);

Pełny kod przykładowy

//opcja kompilatora: cl /clr  #include <vcclr.h>#include <atlstr.h>#include <stdio.h>#using <mscorlib.dll>using namespace System;using namespace System::Runtime::InteropServices;int _tmain(void){   	System::String * str = S"Hello world\n";	//metoda 1	const __wchar_t __pin * str1 = PtrToStringChars(str);	wprintf(str1);		//metoda 2	char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);	printf(str2);	Marshal::FreeHGlobal(str2);	//metoda 3	CString str3(str); 	printf(str3);    return 0;}

MATERIAŁY REFERENCYJNE

Aby uzyskać więcej ogólnych informacji o programie Visual C++ .NET, zobacz następującą grupę dyskusyjną Usenet:Odwiedź Centrum pomocy programu Visual C++ .NET:
kbVC700
Właściwości

Identyfikator artykułu: 311259 — ostatni przegląd: 02/15/2002 14:05:00 — zmiana: 1.0

Microsoft Visual C++ .NET 2002 Standard Edition

  • kbhowto kbhowtomaster kbnewsgrouplink kbmanaged KB311259
Opinia