2009-04-12 149 views

回答

3

您可以使用Marshal.StringToHGlobalAnsi将System.String转换为非托管字符*。确保您完成后通过拨打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

只需通过

CString* name = new CString(managedName); 
转换系统:字符串^对象,MFC的CString

其中managedName是托管字符串。

相关问题