Pinvoke для структуры

У меня есть следующее определение структуры:

#ifndef struct_emxArray_real_T
#define struct_emxArray_real_T
struct emxArray_real_T
{
    real_T *data;
    int32_T *size;
    int32_T allocatedSize;
    int32_T numDimensions;
    boolean_T canFreeData;
};
#endif /*struct_emxArray_real_T*/

и хотел бы использовать его в C# через PInvoke. Структура предназначена для представления матрицы. Любой код структуры C# будет очень признателен. Спасибо!

Кто-то предпринял попытку здесь:

[StructLayout(LayoutKind.Sequential, Size = 1)]
public unsafe struct mytype
{
public double* data;
public int* size;
public int allocatedSize;
public int numDimensions;
public bool canFreeData;
}

но не получил его на работу.

1 ответ

Решение

Структуры C# не поддерживают типы указателей.

Вместо этого указатели должны быть портированы как IntPtr; Вы можете использовать Marshal класс для разрешения указателя.

Поэтому вы должны написать что-то вроде

[StructLayout(LayoutKind.Sequential)]
public unsafe struct mytype
{
    public IntPtr data;
    public IntPtr size;
    public int allocatedSize;
    public int numDimensions;
    public bool canFreeData;
}

Проверьте, какой размер ваш boolean_T тип есть; вам может понадобиться [MarshalAs(...)] атрибут для указания правильного размера.

Другие вопросы по тегам