2014-02-01 2 views
2

У меня есть следующие C# структура:Неверный размер структуры в C#

[StructLayout(LayoutKind.Sequential)] 
internal struct MY_STRUCT 
{ 
    public uint A; 
    public IntPtr B; 
    public uint C; 
} 

У меня есть Windows Server 2008 R2 64-битную платформу размером uint, в котором находится байт, а размер IntPtr является байт.

Тогда, когда я звоню Marshal.SizeOf(typeof(MY_STRUCT)) Я получаю 24 вместо 16 ??? Любая помощь пожалуйста.

+0

См. Http://stackoverflow.com/a/8264681/209199 –

ответ

9

Вам необходимо установить свойство Pack атрибута StructLayout.

Я полагаю, что по умолчанию платформа зависит от платформы и равна 8 на x64. Получить 16 байт:

[StructLayout(LayoutKind.Sequential, Pack=4)] 
internal struct MY_STRUCT 
{ 
    public uint A; 
    public IntPtr B; 
    public uint C; 
} 
Смежные вопросы