Я имею эту структуру в C++ код (C++ Com-сервер)Как я могу управлять переменным порядком на совместимости Com?
struct
{
int f1;
double f2[3];
int f3;
};
Я написал код на C#, который называют это C++ метода COM, и я получаю эту структуру обратно с помощью этого метода.
Я узнал, что структура, с которой я вернулась, имеет различную переменную порядка. Возвращаемое значение имеет структура (поля заказана)
struct
{
double f2[3];
int f1;
int f3;
};
Кто-то может объяснить, как я могу сохранить первоначальный заказ? Почему я получил его обратно в другом порядке?
(структура приходят из других приложений, которые я не могу контролировать - так что использование «StructLayout» не помогает)
Хмм, откуда вы знаете? Макет управляемой структуры не может быть обнаружен. Только просмотр дампа памяти может дать вам подсказку. Структура, подобная этой, всегда получает маршалин, она не может быть ослаблена из-за массива. Таким образом, это не имеет значения, предпочтительнее использовать автоматическую компоновку, поскольку это создает меньший размер. Есть 4 байта заполнения перед элементом массива и 4 байта заполнения в конце неуправляемой структуры. В управляемой структуре нет прокладки вообще, сохраняет 8 байтов. –
Я проверил карту памяти размер. Полевое выравнивание – Yanshof