Здравствуйте, pva, Вы писали:
pva>Вкратце: MSVC при компиляции строит vtbl не в порядке расположения функций в описании объекта. pva>Можно ли заставить ее строить таблицу в требуемом порядке? Может ключ какой компиляции?
Если унаследоваться от абстрактного интерфейса, то будут, как в базовом интерфейсе, по идее.
Здравствуйте, pva, Вы писали:
ЕМ>>Скопировал Ваш пример в файл, но не смог воспроизвести. Уверены, что ничего не путаете? pva>Да, был там и мой косяк. Я его не сразу заметил и документация его не опровергала (MSDN/Google), да и чатжпт сообщал что это не стандартизировано и целиком отдано на откуп компилятору.
Теоретически — да, а практически все известные компиляторы располагают виртуальные методы в VTBL в порядке их следования в исходном коде. Иначе бы никакой COM не работал бы
pva>Поэтому я и пришел на форум. Так-то потом поправил.
Так и что за косяк? Какой-нибудь банальный #ifdef, или что-то повеселее?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Скопировал Ваш пример в файл, но не смог воспроизвести. Уверены, что ничего не путаете?
Да, был там и мой косяк. Я его не сразу заметил и документация его не опровергала (MSDN/Google), да и чатжпт сообщал что это не стандартизировано и целиком отдано на откуп компилятору. Поэтому я и пришел на форум. Так-то потом поправил. Еще и компилятор был старый — VS2008/Win32.
Здравствуйте, Marty, Вы писали:
pva>>Поэтому я и пришел на форум. Так-то потом поправил. M>Так и что за косяк? Какой-нибудь банальный #ifdef, или что-то повеселее?
Имена методов были похожи + чередование public и protected в классе было, вот я и не сразу заметил что порядок объявления методов нарушен у меня в заголовочнике.
Здравствуйте, pva, Вы писали:
pva>чатжпт сообщал что это не стандартизировано и целиком отдано на откуп компилятору.
Как это может быть отдано на откуп компилятору, если это часть ABI? Что б тогда было с совместимостью модулей/библиотек?
pva>компилятор был старый — VS2008/Win32.