Код: Выделить всё
int setData(OuterStruct *data);
Код: Выделить всё
typedef struct InnerStruct
{
unsigned int a
unsigned int b
unsigned char *c
} InnerStruct;
typedef struct OuterStruct
{
unsigned int d
InnerStruct *e
} OuterStruct;
Создал варианты управляемой структуры
Код: Выделить всё
[StructLayout(LayoutKind.Sequential)]
public struct OuterStruct
{
public uint d;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public InnerStruct[] e
}
[StructLayout(LayoutKind.Sequential)]
public struct InnerStruct
{
public uint a;
public uint b;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public byte[] c
}
Код: Выделить всё
[DllImport("myDll.dll", EntryPoint ="setData", CallingConvention= CallingConvention.StdCall]
public static extern int setData(ref OuterStruct data);
Примечание. Я создал множество других методов P/Invoke для этой .dll, которые используют простые структуры, но только этот не работает. Кроме того, проект .dll и C# работает как 32-битный
Подробнее здесь: https://stackoverflow.com/questions/783 ... voke-c-sha