Je développe une application en C ++ / CLI et je dispose d'une bibliothèque de fichiers de fichier CSV dans le code non géré que je souhaite utiliser depuis la partie gérée. Donc, ma fonction ressemble à ceci comme suit:
if( m_myWriter->Write(String::Format("{0}",someValueIWantToSave)) ) { // report success }
3 Réponses :
using namespace System::Runtime::InteropServices; const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer(); From Dev Shed.
Maréchal manquant :: freehglobal (...); qui peut entraîner une fuite de mémoire.
comme Mcandre mention , Marshal :: stringtohglobalansi () a > est correct. Mais n'oubliez pas de libérer la ressource nouvellement allouée avec Maréchal :: FreeHGlobal () , lorsque la chaîne n'est plus utilisée. P>
Alternativement, vous pouvez utiliser MSCLR :: Interop :: Marshal_as A> Modèle pour créer la ressource à chaîne et le libérer automatiquement lorsque l'appel quitte la portée de la ressource. P>
Il y a une liste de quels types ont besoin quelle conversion dans le aperçu du marshalling dans C ++ . P>
duplicaté possible de Comment convertir System :: String to Cons Char *? A >