Здравствуйте, 3m-soft, Вы писали:
3S>Здравствуйте, rg45, Вы писали:
R>>Это все замечательно, но факт остается фактом (из твоего же описания) — динамическая библиотека dynaload.dll содержит свой набор функций-членов класса, вместо того, чтобы использовать экспортируемые.
3S>Она не содержит свой набор функций, все методы она вызывает из mylib.dll (ну я же вижу своими глазами на дебагере, по стеку вызовов, по адресному пространству наконец). Она содержит только обертку вокруг родного деструктора, и чтобы вызывалась именно обертка, а не родной деструктор, подменяется vtable. В дебаг версии я, по крайней мере, понимаю смысл этой обертки. Судя по вызовам, она занимается runtime check. Но в релизной версии runtime check не совместима с оптимизациями, но компилятор все равно делает обертку.
Действительно, создание подобных оберток — это большая свинья со стороны компилятора, и это похоже на правду. Только ориентироваться на адресное пространство в этом случае не приходится, т.к. оно общее для всех динамических библиотек, подгружаемых в один процесс. Тут нужно сравнивать отдельные адреса — создать два объекта — один создать в mylib.dll, другой — в dynaload.dll, и сравнить их vptr, а также их содержимое (можно в отладчике, а можно вывести в файл или консоль). Ради эксперимента можно также временно добавить в класс другие виртуальные функции. Если это действительно обертки, то делегирование вызовов должно быть прекрасно видно в отладчике.
--
Справедливость выше закона. А человечность выше справедливости.