1

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

4

3 回答 3

3

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

于 2009-04-12T04:09:18.440 回答
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);
于 2009-04-12T04:27:23.450 回答
0

您可以简单地将 System::String^ 对象转换为 MFC CString

CString* name = new CString(managedName);

其中 managedName 是一个托管字符串。

于 2009-04-22T09:30:45.320 回答