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

有帮助吗?

解决方案

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

其他提示

要在本机代码使用管理存储器,必须被管理的存储器中的内容复制到本机存储器第一

因此,例如:

从管理存储器复制的内容如下所示:

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

您可以简单地转换系统:字符串^对象,MFC的CString由

CString* name = new CString(managedName);

其中managedName是托管String

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top