Typumwandlung von System::String* nach Char* in Visual C++ .NET 2005 oder in Visual C++ .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 311259 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D311259
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
311259 How to convert from System::String* to Char* in Visual C++ 2005 or in Visual C++ .NET
Dieser Artikel bezieht sich auf die folgenden Namespaces für Microsoft .NET Framework-Klassenbibliotheken:
  • System.Runtime.InteropServices
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt verschiedene Wege zur Typumwandlung von System::String* nach Char* mithilfe von verwalteten Erweiterungen in Visual C++ 2005 oder in Visual C++ .NET.

Methode 1

PtrToStringChars liefert einen internen Zeiger auf das eigentliche Stringobjekt. Wenn Sie diesen Zeiger einem nicht verwalteten Funktionsaufruf übergeben, muss der Zeiger erst fixiert werden, damit das Objekt nicht während asynchroner Speicheraufräumarbeiten verschoben wird:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);					

Methode 2

StringToHGlobalAnsi kopiert den Inhalt eines verwalteten Stringobjekts auf den systemeigenen Heap und wandelt es unmittelbar anschließend in ANSI-Format um. Die folgende Methode reserviert den erforderlichen systemeigenen Heap-Speicher:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Hinweis: In Visual C++ 2005 müssen Sie die Compileroption "Common Language Runtime-Unterstützung" (/clr:oldSyntax) hinzufügen, um den vorhergehenden Beispielcode kompilieren zu können. Um dies zu tun, gehen Sie folgendermaßen vor:
  1. Klicken Sie auf Projekt, danach auf Projektname Eigenschaften.

    Hinweis:Projektname ist ein Platzhalter für den Namen des Projekts.
  2. Erweitern Sie Konfigurationseigenschaften, und klicken Sie anschließend auf Allgemein.
  3. Klicken Sie im rechten Teilfenster der Projekteinstellungen von Common Language Runtime-Unterstützung auf Common Language Runtime Support, Old Syntax (/clr:oldSyntax).
  4. Klicken Sie auf Übernehmen und anschließend auf OK.
Weitere Informationen zu Optionen bzgl. der "Common Language Runtime-Unterstützung" finden Sie auf folgender MSDN-Website (Microsoft Developer Network):
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Diese Schritte beziehen sich auf den gesamten Artikel.

Methode 3

Die VC7-Klasse CString hat einen Konstruktor, der einen verwalteten Zeiger auf einen String erhält und den CString mit dessen Inhalt füllt.
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Kompletter Beispielcode

//compiler option: 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";

	//method 1
	const __wchar_t __pin * str1 = PtrToStringChars(str);
	wprintf(str1);		//method 2
	char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
	printf(str2);
	Marshal::FreeHGlobal(str2);

	//method 3
	CString str3(str); ntf(str3);

    return 0;
}
				

Informationsquellen

Weitere Visual C++ .NET Microsoft Knowledge Base-Artikel finden Sie auf folgender Microsoft-Website:
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-US%3Bvcnet
Weitere allgemeine Informationen zu Visual C++ .NET finden Sie in folgender Usenet-Newsgroup:
Microsoft.public.dotnet.languages.vc

Eigenschaften

Artikel-ID: 311259 - Geändert am: Freitag, 17. Februar 2006 - Version: 4.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Keywords: 
kbhowtomaster kbnewsgrouplink kbmanaged KB311259
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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