Как преобразовать c# struct в C struct?
[StructLayout(LayoutKind.Sequential, Size = 280), Serializable]
public struct AESContext
{
/// int nr;
[MarshalAsAttribute(UnmanagedType.I4, SizeConst = 4)]
public int nr;
/// unsigned long *rk;
[MarshalAsAttribute(UnmanagedType.U4, SizeConst = 4)]
public uint rk;
// unsigned long buf[68];
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)]
public uint[] buf;
}
Это структура C#, которая у меня есть до сих пор. Комментарий над каждым полем вводится в поле C. Я был бы рад, если бы кто-нибудь мог проверить.
1 ответ:
Похоже, что вы пытаетесь получить структуру C# для структуры C, определенной в содержимом элемента. Если это так, то я полагаю, что вы хотите следующее
[StructLayout(LayoutKind.Sequential), Serializable] public struct AESContext { /// int nr; public int nr; /// unsigned long *rk; public UIntPtr rk; // unsigned long buf[68]; [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)] public uint[] buf; }
Основные изменения
- не указывайте
SizeConst
вStructLayout
, Если вы не пытаетесь создать структуру, размер которой отличается (как правило) больше, чем ее содержимое. Это не очень распространено, чтобы сделать этоMarshalAs
обычно не требуется для примитивных типов- используйте
IntPtr
илиUIntPtr
для вызова типов указателей. Они различаются правильно по размеру между 32 и 64 битными платформами