Как настроить выравнивание для виртуальных функций? - PullRequest
5 голосов
/ 27 ноября 2010

Я разрабатываю плагин для Win32, используя mingw и кросс-компиляцию из linux.Хотя мой плагин успешно загружен приложением, и я даже получил com-интерфейс из приложения, я не могу вызвать функции оттуда - приложение не работает.Я думаю, что это связано с неправильным выравниванием vtable реализации интерфейса в mingw (это прекрасно работало с MSVS).

Любая помощь будет оценена, спасибо.

1 Ответ

4 голосов
/ 27 ноября 2010

Выравнивание VTable (фактически, всей системы VTable) полностью зависит от реализации.Вы должны использовать тот же компилятор, скомпилированный с теми же параметрами / настройками, чтобы иметь работоспособную программу после компоновки.

По этой причине вы не можете связать сгенерированные msvc двоичные файлы с MinGW.Даже если у вас есть таблицы для выравнивания одинаково, алгоритмы искажения имен различны, и никто не говорит, что два компилятора выбрали бы один и тот же порядок для отдельных функций в самой vtable.

Если вам нужен переносимыйинтерфейс между двумя компиляторами, то вы должны сделать это с интерфейсом C (технически extern "C"), который имеет стандартизированный ABI.

...