Что эквивалентно C # в Marshal.PtrToStructure и StructureToPtr в node-ffi? - PullRequest
0 голосов
/ 20 октября 2019

Функции 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

Маршаллизирует данные из управляемого объекта в неуправляемый блок памяти.

Структура параметров (Object): управляемый объект, который содержит данные, подлежащие маршалированию. Этот объект должен быть структурой или экземпляром отформатированного класса.

ptr (IntPtr): указатель на неуправляемый блок памяти, который должен быть выделен до вызова этого метода.

1 Ответ

0 голосов
/ 20 октября 2019

Хотя я не знаю функции общего назначения, которую так же легко использовать, как Marshal.PtrToStructure/StructureToPtr, я нашел способ более низкого уровня для выполнения тех же задач: https://stackoverflow.com/a/58473299/2441655

Сводка: найдите / создайте буфер node-ffi, который непосредственно указывает на данные структуры в неуправляемой памяти, затем:

  • Для чтения: установите поле Buffer's type соответствующим образом, затем вызовите deref().
  • Для записи: Позвоните buffer.writeUInt32LE, со смещением указанного поля.
...