Я пытаюсь позвонить NtGetContextThread с C# на AMD64. Проблема в том, что структура CONTEXT для AMD64 должна быть выровнена по 16-байтовой границе, а когда я звоню NtGetContextThread Я всегда получаю STATUS_DATATYPE_MISALIGNMENT
. Я знаю, что C# может выровнять отдельные элементы структуры, используя атрибут Pack, но, похоже, он не может выровнять всю структуру. Можно ли мне это сделать?C# P/invoke выравнивание структуры
РЕДАКТИРОВАТЬ: Просто, чтобы все было ясно, я не хочу выровнять отдельные элементы. Я хочу выровнять всю структуру .
Нет, это * не * то, что я хочу сделать. Я хочу выровнять структуру * whole * CONTEXT на 16-байтовой границе, а не отдельные поля, такие как DECLSPEC_ALIGN. И я знаю, что делает свойство Pack, большое спасибо. В настоящее время я использую RtlAllocateHeap с выравниванием по 16 байт в качестве обходного пути. – wj32
Нет необходимости принимать это лично. То, как вы описываете «Пакет», не ясно, понимаете ли вы это. Пакет не является атрибутом, и он не может использовать для индивидуального выравнивания. Может быть, вы можете увидеть, как я ошибался в этом вопросе. – Odrade
И, конечно, я не знаю ответа на ваш вопрос (теперь, когда я это правильно понимаю). – Odrade