2015-02-18 2 views
0

Я имею эту структуру в C++ код (C++ Com-сервер)Как я могу управлять переменным порядком на совместимости Com?

struct 
{ 
    int  f1; 
    double f2[3]; 
    int  f3; 
}; 

Я написал код на C#, который называют это C++ метода COM, и я получаю эту структуру обратно с помощью этого метода.

Я узнал, что структура, с которой я вернулась, имеет различную переменную порядка. Возвращаемое значение имеет структура (поля заказана)

struct 
{ 
    double f2[3]; 
    int  f1;  
    int  f3; 
}; 

Кто-то может объяснить, как я могу сохранить первоначальный заказ? Почему я получил его обратно в другом порядке?

(структура приходят из других приложений, которые я не могу контролировать - так что использование «StructLayout» не помогает)

+0

Хмм, откуда вы знаете? Макет управляемой структуры не может быть обнаружен. Только просмотр дампа памяти может дать вам подсказку. Структура, подобная этой, всегда получает маршалин, она не может быть ослаблена из-за массива. Таким образом, это не имеет значения, предпочтительнее использовать автоматическую компоновку, поскольку это создает меньший размер. Есть 4 байта заполнения перед элементом массива и 4 байта заполнения в конце неуправляемой структуры. В управляемой структуре нет прокладки вообще, сохраняет 8 байтов. –

+0

Я проверил карту памяти размер. Полевое выравнивание – Yanshof

ответ

0

Вы можете использовать StructLayoutAttribute в коде C#.

[StructLayout(LayoutKind.Sequential)] 
+0

. Структура происходит из другого приложения, которое я не могу контролировать, так что это не разборка – Yanshof

+0

@Yanshof, возможно, ваш вопрос может улучшить ваш вопрос. –

Смежные вопросы