This problem has been reported by Martin Ecker. The easy fix is to just permit multiple definitions of the same virtual functions in different DLLs. This has eliminated the symptom for this user. I'm concerned that this won't really work in the general case. I would be prefer to: a) trap attempts at multiple registrations of the same class as errors. b) explain how to avoid these situtations in the first place. I'm kind of stuck on b). It seems to me that if A (base) is in a DLL and B(derived) is in an executable, there should be no multiple definitions of B. But the brief description of this user's case seems to suggest that this isn't the case - though without more information one can't be sure. Robert Ramey Sergey Skorniakov wrote:
I think I resolved the issue. The problem is that if the base class A is defined in the main executable, the dynamically loaded DLL apparently uses a different address space for the definition. Even if I return a pointer to A from the DLL, I get an unregistered void cast exception. (I don't know why. Anyone?) If I define the base class in yet another DLL that both the main program and the dynamically loaded DLL link to, serialization works just fine.
This is very odd to me - how does B compile in the DLL without
This is still a murkey area. I believe there are still unresolved issues here.
I am also encountered the same problem yesterday. The source of evil seems to be in double registration if rtti-enabled class serialized both in dll and in exe. void extended_type_info::self_register() just called twice - from exe and from dll. Later, code such const boost::serialization::extended_type_info * this_type = boost::serialization::type_info_implementation<T>::type::get_instance(); const boost::serialization::extended_type_info * true_type = boost::serialization::type_info_implementation<T>::type::get_derived_extended_type_info(t); if(*this_type == *true_type){...
works wrong because extended_type_info::operator=(const extended_type_info &rhs) uses just an address of extended_type_info, which can be different in such situation. I had attached sample files illustrating problem.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users