Looking for c# Keywords? Try Ask4Keywords

C# Language Чтение структур с маршалом


пример

Класс маршала содержит функцию PtrToStructure , эта функция дает нам возможность считывания структур неуправляемым указателем.

Функция PtrToStructure получила много перегрузок, но все они имеют одно и то же намерение.

Общая структура PtrToStructure :

public static T PtrToStructure<T>(IntPtr ptr);

T - тип структуры.

ptr - указатель на неуправляемый блок памяти.

Пример:

NATIVE_STRUCT result = Marshal.PtrToStructure<NATIVE_STRUCT>(ptr);       
  • Если вы работаете с управляемыми объектами при чтении собственных структур, не забудьте прикрепить свой объект :)
 T Read<T>(byte[] buffer)
    {
        T result = default(T);
        
        var gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
    
        try
        {
            result = Marshal.PtrToStructure<T>(gch.AddrOfPinnedObject());
        }
        finally
        {
            gch.Free();
        }
        
        return result;
    }