Boost logo

Boost Users :

Subject: Re: [Boost-users] Serializing derived class in dll
From: Robert Ramey (ramey_at_[hidden])
Date: 2009-06-13 10:27:46


I think this is a bug that I have recently addressed. I've fixed on my
machine
but I don't think I've uploaded it. I've got a couple of other things to
test
before I do so.

Robert Ramey

Christian Bergstrand wrote:
> "decl" for what?
>
> I should have written that I am using a .def file to get getobj out of
> the dll, to add some more missing information, I am running MSVC 2005
> on Win XP. The sample is a compileable and runnable solution
>
> Where can I find a introduction to running the tests? I have spent 2
> hours trying to get the test cases to run.
>
> Christian
>
> Robert Ramey skrev:
>> Shouldn't there be some "decl" statements in here?
>>
>> There is a test in the package test_dll_exported...
>>
>> Perhaps you might check to see that that test works with your setup.
>>
>> I'm now in the process of adding tests for this functionality
>> for version 1.40 . Can't promise I'll make the deadline though.
>>
>> Robert Ramey
>>
>> Christian Bergstrand wrote:
>>
>>> I am working on a programwith pluggable classes delivered in DLLs,
>>> so I have an virtual abstract base class in my EXE and both
>>> abstract and concrete classes in a hiearchy in my first DLL. I am
>>> trying ot serialize the derived class instances through a base
>>> class pointer. I am not able to get it to work after reading the
>>> samples in the documentation and
>>> the most likely looking threads here.
>>>
>>> So I broke it down in to a sample EXE/DLL and can still not get it
>>> to work.
>>> I am using version 1_38 currently, also tried with 1_36_0
>>>
>>> I am getting the exeption on oserializer.hpp:374 where the comment
>>> says // note:if this exception is thrown, be sure that
>>> derived pointer
>>> // is either registered or exported.
>>>
>>> In my opinion I am exporting my derived class, but I am feeling that
>>> it is probably going into the wrong instance, since the export code
>>> is going into the DLL, but I can not find any other recomendation.
>>>
>>> So what am I missing ...
>>>
>>> ------------------------
>>> serializedll\base.h
>>> ------------------------
>>> #pragma once
>>>
>>> class Base
>>> {
>>> public:
>>> virtual void f() = 0;
>>> private:
>>> friend class boost::serialization::access;
>>> template<class Archive>
>>> void serialize(Archive & ar, const unsigned int version)
>>> {
>>> }
>>> };
>>> BOOST_SERIALIZATION_ASSUME_ABSTRACT( Base )
>>>
>>> ------------------------
>>> serializedll\serializedll.cpp, in the EXE
>>> ------------------------
>>> #include <tchar.h>
>>> #include <windows.h>
>>>
>>> #include <fstream>
>>>
>>> #include <boost/archive/text_oarchive.hpp>
>>> #include <boost/serialization/nvp.hpp>
>>>
>>> #include "base.h"
>>>
>>>
>>> int _tmain(int argc, _TCHAR* argv[])
>>> {
>>> typedef Base * ( GetObjFun )();
>>> GetObjFun * f = (GetObjFun*)GetProcAddress( LoadLibrary( TEXT(
>>> "plugin.dll" ) ), "getobj" );
>>> Base * obj = f();
>>>
>>> std::ofstream ofs( "c:\\test.xml" );
>>> boost::archive::text_oarchive oa(ofs);
>>>
>>> oa << obj;
>>>
>>> return 0;
>>> }
>>>
>>>
>>> ------------------------
>>> plugin\plugin.cpp, in the DLL
>>> ------------------------
>>> #include <windows.h>
>>>
>>> #include <boost/serialization/export.hpp>
>>> #include <boost/archive/text_oarchive.hpp>
>>>
>>> #include "../serializedll/base.h"
>>>
>>> BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call,
>>> LPVOID lpReserved )
>>> {
>>> return TRUE;
>>> }
>>>
>>> class Derived : public Base
>>> {
>>> public:
>>> virtual void f()
>>> {
>>> }
>>> private:
>>> friend class boost::serialization::access;
>>> template<class Archive>
>>> void serialize(Archive & ar, const unsigned int version)
>>> {
>>> ar & boost::serialization::base_object< Base >( *this );
>>> }
>>> };
>>>
>>> BOOST_CLASS_EXPORT( Derived )
>>>
>>> Base * getobj()
>>> {
>>> return new Derived();
>>> }
>>>
>>
>>
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net