在C ++中托管和非托管类型之间的转换?

时间:2009-04-12 03:56:29

标签: user-interface c++-cli unmanaged managed

当我在C ++中使用GUI时,我认为文本字段存储为托管字符串。我需要一种方法将它们转换为标准的int,浮点数和字符串。有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

您可以使用Marshal.StringToHGlobalAnsi将System.String转换为非托管char *。通过致电Marshal.FreeHGlobal,确保在完成后将其释放。要将字符串转换为数值,可以使用常规的.NET解析函数,例如Int32.Parse

答案 1 :(得分: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);

答案 2 :(得分:0)

您可以通过

简单地将System :: String ^对象转换为MFC CString
CString* name = new CString(managedName);

其中managedName是托管字符串。

相关问题