В C# структура со строковым членом выглядит следующим образом: publi c struct EDNetBuf {
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public string dummy;
public delegate void finalizeDelegate(System.IntPtr @object);
public finalizeDelegate finalize;
public readonly int _ref;
public EDNetEventType type;
public uint len;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public string data;
}
[System.Runtime.InteropServices.StructLayoutAttribute (System.Runtime.InteropServices.LayoutKind.Sequential )]
public struct EDNetFrame
{
public EDNetBuf buf; //*< a buffer, the base object
public uint timestamp; //*< timestamp
public byte channel; //*< channel number
public byte ptype; //*< payload, see #EDNetCodecID
public ushort flags; //*< flags, see Flag
public int fmt; //*< format, see #EDNetFrameFormat
public int width; //*< The width of video frame
public int height; //*< The height of video frame
}
У меня неуправляемый c код, из которого я преобразовал C# код следующим образом:
struct EDNetBuf
{
/**
* private data. NEVER MODIFY THIS!
*/
const char *dummy;
/**
* private data. NEVER MODIFY THIS!
*/
void (*finalize) (void *object);
/**
* private data. NEVER MODIFY THIS!
*/
int _ref;
/**
* the length of buffer data.
*/
unsigned int len;
/**
* the pointer to buffer data.
*/
char *data;
};
In C# Когда я выполняю маршал с помощью:
f = (EDNetFrame) System. System.AccessViolationException произошла в mscorlib.dll Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена .. '
Я обнаружил, что это из-за фиктивной строки члена структуры. Как решить эту ошибку?