C++ 中托管类型和非托管类型之间的转换?
-
09-09-2019 - |
题
我认为,当我在 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
不隶属于 StackOverflow