2009-07-08 17 views
7

Ich entwickle eine App in C++/CLI und habe eine CSV-Datei schreiben Bibliothek in nicht verwalteten Code, die ich aus dem verwalteten Teil verwenden möchten. Also meine Funktion sieht wie folgt aus:Wie konvertiere ich ein System :: String^in const char *?

bool CSVWriter::Write(const char* stringToWrite); 

... aber ich bin wirklich kämpfen, meine glänzende-System zu konvertieren :: String^in etwas kompatibel. Grundsätzlich Ich hatte gehofft, durch zu nennen, etwas zu tun wie:

if(m_myWriter->Write(String::Format("{0}",someValueIWantToSave))) 
{ 
    // report success 
} 
+0

möglich duplicate von [wie zu konvertieren System :: String zu const char \ *?] (Http://stackoverflow.com/questions/29335426/how-to-convert-systemstring-to-const-char) –

Antwort

13
using namespace System::Runtime::InteropServices; 
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer(); 

Von Dev Shed.

+0

+ 1/Akzeptiert: Vielen Dank! –

+14

Fehlender Marschall :: FreeHGlobal (...); was zu einem Speicherleck führen kann. –

+4

@ Cedrik, dann poste eine bessere Version meines Codes. – mcandre

11

Wie mcandre erwähnt, ist Marshal::StringToHGlobalAnsi() korrekt. Vergessen Sie jedoch nicht, die neu zugewiesene Ressource mit freizugeben, wenn die Zeichenfolge nicht mehr verwendet wird.

Alternativ können Sie die Vorlage msclr::interop::marshal_as verwenden, um die Zeichenfolgenressource zu erstellen und sie automatisch freizugeben, wenn der Aufruf den Gültigkeitsbereich der Ressource verlässt.

Verwandte Themen