2009-04-12 3 views

ответ

3

Вы можете преобразовать System.String в неуправляемый символ *, используя Marshal.StringToHGlobalAnsi. Убедитесь, что вы освободили его, когда закончите, позвонив по номеру Marshal.FreeHGlobal. Чтобы преобразовать строки в числовые значения, вы можете использовать обычные функции синтаксического анализа .NET, такие как Int32.Parse.

0

Чтобы использовать управляемую память в собственном коде, сначала необходимо скопировать содержимое управляемой памяти в исходную память.

Так, например:

Копирование содержимого из управляемой памяти выглядит следующим образом:

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); 

Поскольку мы имеем дело с управляемой памяти, сбор мусора может смещаться и двигаться управляемые данные в другое место и все будет потеряно, если мы попытаемся найти данные, которые хотим конвертировать.

Поэтому мы хотим, чтобы "закрепить его в памяти" с помощью __pin для преобразования из управляемого в неуправляемый:

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

Вы можете просто преобразовать System :: String^объекты MFC CString по

CString* name = new CString(managedName); 

где managedName - управляемая строка.

Смежные вопросы