_>Делайте классическим способом:
В конце прошлого века я сам такое всем советовал.
C>>и ручной подсчет ссылок в конструкторах? _>Причем тут подсчет ссылок, это к тому что у библиотеки может быть свой runtime и в частности свой менеджер памяти.
Различие в менеджерах памяти неважно, если право владения указателями (в т.ч. в составе объектов, таких как std::vector) не будет предаваться за пределы dll.
У меня не передается, поскольку конструкторы/деструкторы/оператор= — экспортируются, а доступа к приватным членам нет, в том числе со стороны членов класса, генерируемых компилятором (потому что их нет).
Из опасностей остается:
1) различие в выравнивании (если в классе несколько членов),
2) различение в реализации передаваемых объектов (std::vector может хранить два указателя, а может указатель и длину, или длина будет храниться в блоке под указателем,... )
3) Передаваемые объекты не должны содержать inline (или генерируемых компилятором) членов, которые вызывали бы функции C-runtime или C++-runtime, который действительно может измениться. Это было бы нарушением ODR.
Собственно п.(2) и (3) не позволяют передавать объекты стандартной библиотеки под windows. (Под linux проблемы нет, но мне нужны обе платформы.)