Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是C#';节点ffi中的s Marshal.ptr结构和StructureToPtr?_C#_Marshalling_Ffi_Node Ffi - Fatal编程技术网

什么是C#';节点ffi中的s Marshal.ptr结构和StructureToPtr?

什么是C#';节点ffi中的s Marshal.ptr结构和StructureToPtr?,c#,marshalling,ffi,node-ffi,C#,Marshalling,Ffi,Node Ffi,C#函数描述如下 Marshal.ptr结构: 将数据从非托管内存块封送到托管对象 参数 ptr(IntPtr):指向非托管内存块的指针 结构(对象):要将数据复制到的对象。这必须是格式化类的实例 Marshal.StructureToPtr: 将数据从托管对象封送到非托管内存块 参数 结构(对象):保存要封送的数据的托管对象。此对象必须是格式化类的结构或实例 ptr(IntPtr):指向非托管内存块的指针,在调用此方法之前必须分配该内存块 虽然我不知道有哪一个通用函数像Marshal.PtrT

C#函数描述如下

Marshal.ptr结构:

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

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

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

Marshal.StructureToPtr:

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

参数 结构(对象):保存要封送的数据的托管对象。此对象必须是格式化类的结构或实例

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


虽然我不知道有哪一个通用函数像
Marshal.PtrToStructure/StructureToPtr
那样易于使用,但我确实找到了一种较低级别的方法来完成同样的事情:

摘要:查找/创建直接指向非托管内存中结构数据的节点ffi缓冲区,然后:

  • 读取:适当设置缓冲区的
    类型
    字段,然后调用
    deref()
  • 写入:调用
    buffer.writeUInt32LE
    ,并提供给定字段的偏移量