Marshal.StringToHGlobalAnsi将托管内容复制string到非托管内存中,那么将string从非托管内存复制到托管内存中怎么做,请 写一个代码范例
时间: 2024-12-09 12:24:18 浏览: 22
在C#中,可以使用`Marshal.PtrToStringAnsi`方法将非托管内存中的ANSI字符串复制到托管内存中。以下是一个代码范例,演示了如何从非托管内存复制字符串到托管内存:
```csharp
using System;
using System.Runtime.InteropServices;
class Program
{
static void Main()
{
// 创建一个托管字符串
string managedString = "Hello, World!";
// 将托管字符串转换为非托管内存中的ANSI字符串
IntPtr unmanagedPointer = Marshal.StringToHGlobalAnsi(managedString);
// 从非托管内存复制字符串到托管内存
string copiedString = Marshal.PtrToStringAnsi(unmanagedPointer);
// 输出结果
Console.WriteLine("Original Managed String: " + managedString);
Console.WriteLine("Copied Managed String: " + copiedString);
// 释放非托管内存
Marshal.FreeHGlobal(unmanagedPointer);
}
}
```
在这个例子中,我们首先创建了一个托管字符串`managedString`,然后使用`Marshal.StringToHGlobalAnsi`将其内容复制到非托管内存中。接着,我们使用`Marshal.PtrToStringAnsi`从非托管内存中复制字符串回托管内存,并存储在`copiedString`中。最后,我们输出原始的托管字符串和复制后的托管字符串,以验证操作的正确性,并使用`Marshal.FreeHGlobal`释放之前分配的非托管内存。
阅读全文