我想用C#把byte[]传递给一个带IntPtr参数的方法,这可能吗?如何实现?

推荐答案

不确定是否要将IntPtr获取到数组中,但可以使用Mashal复制数据以与非托管代码一起使用.复印件:

IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);
// Call unmanaged code
Marshal.FreeHGlobal(unmanagedPointer);

或者,您可以声明一个具有一个属性的 struct ,然后使用Marshal.PtrToStructure,但这仍然需要分配非托管内存.

Edit:此外,正如Tyalis指出的,如果不安全代码对您来说是一个选项,那么您也可以使用fixed

.net相关问答推荐

如何在 .net MAUI 中删除不需要编译的平台?

查找 2 个已知值之间的字符串

在 .NET 中获取执行 exe 路径的最佳方法是什么?

.NET 的 Visual Studio 调试器提示和技巧

编译时禁用 Dll 文化文件夹

JavaScript 中的IsNullOrWhitespace?

如何让 DateTimePicker 显示一个空字符串?

有什么方法可以在不重新编译的情况下覆盖 .NET Windows 服务名称?

[DllImport("QCall")] 是什么?

如何使用 NUnit(或可能使用另一个框架)测试异步方法?

哪个密码字符在 winforms 文本框中显示黑点 (•)?

如何正确和完全关闭/重置 TcpClient 连接?

微软内部 PriorityQueue 中的错误?

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

Microsoft.Bcl.Build NuGet 包有什么作用?

使 HashSet 不区分大小写

如何从 WCF REST 方法返回自定义 HTTP 状态代码?

找不到 System.Windows.Media 命名空间?

C# 相当于 Java 的 Exception.printStackTrace()?

浮动与双重性能