将string从非托管内存复制到托管内存中怎么做,请 写一个代码范例
时间: 2024-12-09 09:26:04 浏览: 27
在C#中,将字符串从非托管内存复制到托管内存通常涉及到使用`Marshal.PtrToStringAnsi`或`Marshal.PtrToStringUni`方法,这取决于字符串的编码格式。以下是一个示例代码,展示如何将ANSI编码的字符串从非托管内存复制到托管内存:
```csharp
using System;
using System.Runtime.InteropServices;
class Program
{
static void Main()
{
// 假设有一个非托管内存中的ANSI编码字符串
IntPtr unmanagedPointer = Marshal.StringToHGlobalAnsi("Hello, World!");
try
{
// 从非托管内存复制字符串到托管内存
string managedString = Marshal.PtrToStringAnsi(unmanagedPointer);
Console.WriteLine(managedString);
}
finally
{
// 释放非托管内存
Marshal.FreeHGlobal(unmanagedPointer);
}
}
}
```
在这个例子中,我们首先使用`Marshal.StringToHGlobalAnsi`方法创建一个包含ANSI编码字符串的非托管内存块,并获取指向该内存的指针。然后,我们使用`Marshal.PtrToStringAnsi`方法将这个指针指向的字符串内容复制到一个新的托管字符串对象中。最后,我们通过调用`Marshal.FreeHGlobal`来释放之前分配的非托管内存。
请注意,处理非托管资源时一定要小心,确保及时释放内存以避免内存泄漏。
阅读全文