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

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.


powrót do początku

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);
powrót do początku

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);
powrót do początku

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);
powrót do początku

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:
powrót do początku
Właściwości

Identyfikator artykułu: 311259 — ostatni przegląd: 15.02.2002 — zmiana: 1

Opinia