c# - 将 `ref SomeStruct` 转换为 IntPtr
问题描述
我有以下重载
public void SendMessage(IntPtr wParam)
{
// ...
}
我有一个结构,例如
public struct BlittableStruct
{
public int x;
}
我想定义一个SendMessage
调用 IntPtr 重载的重载。
public void SendMessage(ref BlittableStruct bs)
{
SendMessafe(???);
}
所以:如何在 c# 中将此 ref 转换为 blittable 结构到 IntPtr
性能很重要,因此性能最高的选项是理想的。我还需要保留引用语义,所以Marshal.StructureToPtr
不是一个选择。
解决方案
您需要将 BlittableStruct 从托管内存转换为非托管内存。尝试以下:
public void SendMessage(BlittableStruct bs)
{
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(bs));
Marshal.StructureToPtr(bs, ptr, true);
SendMessage(ptr);
}
推荐阅读
- sql - 在表 B 的 WHERE 语句中使用表 A 中的列内容
- lua - 使用 luac 和 string.dump() 创建的 lua 5.1 字节码有区别吗?
- python - ssh2-python 包。userauth_publickey_fromfile 方法的有效参数
- rest - 如何使用rest api获取用户在Magento2中下的所有订单列表
- javascript - Unable to get Uint8Array bytes
- mysql - 如何在mysql中使用同一个表连接进行优化?
- kubernetes - 在 GCE 中添加 NAT 网关后“kubectl 日志”不起作用
- styled-components - 使用 styled-components 提供 css 类
- scala - Spark:如何根据 Scala 中的字符串模式进行分组?
- javascript - 未找到错误,但我没有在表中插入值