节点ffi中C#的Marshal.PtrToStructure和StructureToPtr的等效项是什么?

问题描述 投票:0回答:1

下面介绍C#函数。

Marshal.PtrToStructure:https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.ptrtostructure

将数据从非托管内存块封送到托管对象。

参数ptr(IntPtr):指向非托管内存块的指针。

结构(对象):要将数据复制到的对象。这必须是格式化类的实例。

Marshal.StructureToPtr:https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.structuretoptr

将数据从托管对象封送到非托管内存块。

参数结构(对象):一个托管对象,其中包含要封送的数据。该对象必须是格式化类的结构或实例。

ptr(IntPtr):指向非托管内存块的指针,必须在调用此方法之前对其进行分配。

c# marshalling ffi node-ffi
1个回答
0
投票

虽然我不知道像Marshal.PtrToStructure/StructureToPtr那样容易使用的通用函数,但我确实想出了一种下层方式来完成相同的事情:https://stackoverflow.com/a/58473299/2441655

摘要:查找/创建直接指向非托管内存中的struct-data的node-ffi缓冲区,然后:

  • 要读取:适当地设置缓冲区的type字段,然后调用deref()
  • 写入:调用buffer.writeUInt32LE,并提供给定字段的偏移量。
© www.soinside.com 2019 - 2024. All rights reserved.