2009-04-12 11 views

Répondre

3

Vous pouvez convertir un System.String en un caractère non géré * à l'aide de Marshal.StringToHGlobalAnsi. Assurez-vous de le libérer lorsque vous avez terminé en appelant le Marshal.FreeHGlobal. Pour convertir les chaînes en valeurs numériques, vous pouvez utiliser les fonctions d'analyse régulières .NET telles que Int32.Parse.

0

Pour utiliser la mémoire gérée en code natif, vous devez d'abord copier le contenu de la mémoire gérée dans la mémoire native.

Ainsi, par exemple:

Copie du contenu de la mémoire gérée est la suivante:

const int len = 50; 
BYTE *destination = new BYTE[nLength]; 
System::Byte source[] = new System::Byte[len]; 

System::Runtime::InteropServices::Marshal:: 
    Copy(source, 0, IntPtr((void *)destination, len); 

Parce que nous avons affaire à la mémoire gérée, la collecte des ordures peut se déplacer et déplacer les données gérées à un autre endroit et tout serait perdu si nous essayions de localiser les données que nous voulons convertir.

donc nous voulons "épingler en mémoire" à l'aide __pin convertir réussi à non géré:

const int len = 50; 
BYTE *source    = new BYTE[len]; 
System::Byte destination[]  = new System::Byte[len]; 
BYTE __pin *managedData = &(destination[0]); 

::memcpy(source, managedData, len); 
0

Vous pouvez simplement convertir System :: String^objets MFC CString par

CString* name = new CString(managedName); 

où managedName est une chaîne gérée.