Я понимаю, что это проблема, похожая на другие, но структура в C ++ (которую я сам не создал) отличается от структуры, с которой я столкнулся на этом сайте. Короче говоря, как мне преобразовать структуру C ++ в C #.
Я использовал [FieldOffset (0)] для объединения и вводил каждую часть структуры в том же порядке, что и в C #. Я также попытался сделать структуру небезопасной для размещения в пустоте *.
typedef struct {
int rFlags,
rType,
rEvent,
rSocket;
TCHAR rMsg[256];
int rFrameWidth,
rFrameHeight;
short* rFrameBuffer;
union {
int rCaptureRows;
int rCaptureFrames;
};
int rCapturePercent;
void* rUserCallBackProc,
* rUserParam;
int rAborted;
void* rPacketData;
int rFGControl;
} tVDACQ_CallBackRec;
РЕДАКТИРОВАТЬ:
[StructLayout(LayoutKind.Explicit, Size = 64)]
public unsafe struct tVDACQ_CallBackRec
{
[FieldOffset(0)]
public int rFlags;
[FieldOffset(4)]
public int rType;
[FieldOffset(8)]
public int rEvent;
[FieldOffset(12)]
public int rSocket;
[FieldOffset(16)]
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] rMsg; //I assume this is part of the problem
[FieldOffset(20)]
public int rFrameWidth;
[FieldOffset(20)]
public int rFrameHeight;
[FieldOffset(24)] //As well as this as I've read that short * -> short[] is a 'no go'
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 1298304)]
public short[] rFrameBuffer;
[FieldOffset(24)]
public int rCaptureRows;
[FieldOffset(32)]
public int rCaptureFrames;
[FieldOffset(36)]
public int rCapturePercent;
[FieldOffset(40)]
public void* rUserCallBackProc;
[FieldOffset(44)]
public void* rUserParam;
[FieldOffset(48)]
public int rAborted;
[FieldOffset(52)]
public void* rPacketData;
[FieldOffset(56)]
public int rFGControl;
}
I expect the function from the dll (which is also not mine) to return the struct which will later be used in the script.