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

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 311259 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Ten artykuł został opublikowany wcześniej pod numerem PL311259
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

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

PtrToStringChars to 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

StringToHGlobalAnsi to 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 VC7 CString zawiera 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:
Microsoft.public.dotnet.languages.vc
Odwiedź Centrum pomocy programu Visual C++ .NET:
Centrum pomocy programu Visual C++ .NET (2002)

Właściwości

Numer ID artykułu: 311259 - Ostatnia weryfikacja: 15 lutego 2002 - Weryfikacja: 1.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual C++ .NET 2002 Standard Edition
Słowa kluczowe: 
kbhowto kbhowtomaster kbnewsgrouplink kbmanaged KB311259

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com