У меня в dll есть запись типа
inline instance* i = new instance(some_args);
inline std::vector<struct_with_instance_prt>* v = new std::vector<struct_with_instance_prt>{ {some_args, i} };
extern "C" __declspec(dllexport) std::vector<struct_with_instance_prt>* getvector() { return v; }
Структура instance имеет виртуальную функцию, что она реализует от абстрактной структуры (коя находится также и в приложении что импортирует).
При LoadLibrary все импортируется благополучно, кроме виртуальных функций. Но если я буду экспортировать не вектор структур с указателем на экземпляр как поле, а вектор указателей на экземпляр, то вызов виртуальной функции происходит верно.
Контекст выполнения - dll может загружаться несколько раз в 1 процесс без предварительного высвобождения.
Почему так происходит?
Как следует экспортировать экземпляры структур, если обращение к ним идет только по указателям (то есть получаем указатель, а далее работаем по типу i->f())?
Везде нахожу ответы для примитивов и для __declspec(dllexport) + __declspec(dllimport), а для экземпляров нет. Сектор данных dll где обычно лежат примитивы тоже не помог.