К вопросу об экспортировании классов в DLL
Так и делают. Разумных альтернатив нет. Во всех студиях одинаково.
хотелось бы подтверждения например такого: DLL собрана 2005-й студией, а теперь нормально используется с проектом, собираемым в 2010-й.
не поменялось ли там чего?
насколько это разумно/возможно делать напрямую типаСамая переносимая вещь - это объявить абстрактный класс и функцию, которая его будет создавать (через def-файл таблица виртуальных функций везде одинаково устроена вроде как.
code:
#if defined( BUILD_DLL )
#define IMPORT_EXPORT __declspec(dllexport)
#else
#define IMPORT_EXPORT __declspec(dllimport)
#endif
class IMPORT_EXPORT MyClass {
...
};
таблица виртуальных функций везде одинаково устроена вроде как.да, это так, потому что COM
Лично собирал одно и тоже 2003 2005 2008 и 2012 студией, 2010 не собирал, но знаю, что там также.
Заморочек касательно этой конструкции нет.
Но ваще принято собирать все одной студией, заморочки есть, например в каждой студии свой рантайм, lib файл взависимости от настроек не всегда совместимы ну и т.д.
Так dll вроде и пишутся обычно с тем расчетом, что бы можно было совместно использовать dll, скомпилированные разными компиляторами, не?
А если спокойно стрингами перебрасываться, то уже лучше бы одну версию стандартной библиотеки...
как срастутся разные runtime, разные аллокаторы.
а если у меня одна dll - отладочная, а другая - релизная?
лучше не рисковать
ясно. останемся тогда на чистом С интерфейсе.
подобный вопрос обсуждали здесь:
это должен быть чисто C-интерфейс,а чем абстрактные классы плохи?
это тоже ок Я косячно выразился, имелось в виду, что не надо обмениваться объектами стандартной библиотеки (и ссылками на них)
Разные рантайм (как мне кажется) нормально срастутся, если перебрасываться только PODструктурами и указателями на абтрактные классы. Распределение памяти никак не срастется, память надо же удалять в той же dll, где выделил.
Оставить комментарий
yolki
насколько это разумно/возможно делать напрямую типа?
насколько это переживёт разные версии студии? например 2005 vs 2010 ?
какие есть альтернативы?