Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] Export macro doesnt work
From: Jari (jaristr_at_[hidden])
Date: 2011-09-02 04:23:01


Hello why cant i still make it work?

On Mon, Aug 29, 2011 at 1:22 PM, Jari <jaristr_at_[hidden]> wrote:
> I also noticed that upon program exit
> basic_serializer_map::erase(const basic_serializer * bs)   is being
> callled
> at line
> 75
>
> And it contains all the registered classes.
>
> But when serialization call is made before this, in basic_serializer_map::find
> at line
> 95
>
> the m_map contains only few entries.
>
> Why?
>
> the entries seem to be missing from m_map during program execution and
> only appear there at begin and end...
>
>
>
>
>
> On Mon, Aug 29, 2011 at 1:13 PM, Jari <jaristr_at_[hidden]> wrote:
>> Thx I tried this but it didnt fix the problem..
>>
>> I traced in basic_serializer_map.cpp and noticed that all the classes
>> are being inserted to m_map , some even multiple times and also lot of
>> null pointers.
>>
>> in Line 46:
>>
>>    const std::pair<map_type::iterator, bool> result =
>>        m_map.insert(bs);
>>
>>
>> But still get the unexported class error.
>>
>>
>>
>> 2011/8/13 Júlio Hoffimann <julio.hoffimann_at_[hidden]>:
>>> Hi Jari,
>>> I had the same frustration with Boost.Serialization these days, i know
>>> exactly what you're thinking: wtf?! This should be easy!
>>> Let me tell you what solved the problem in my case...
>>> Suppose you have a derived class D implemented as usual (D.hpp / D.cpp). You
>>> need to use the two macros mentioned at the end of the files *outside* any
>>> namespace. For instance:
>>>
>>> //////////////////////////////D.hpp
>>> namespace N
>>> {
>>>     class D : public B
>>>     {
>>>         // something
>>>     };
>>> } // namespace N
>>>
>>> BOOST_CLASS_EXPORT_KEY( N::D )
>>>
>>> //////////////////////////////D.cpp
>>> #include D.hpp
>>>
>>> namespace N
>>> {
>>>     // D implementation
>>> } // namespace N
>>>
>>> BOOST_CLASS_EXPORT_IMPLEMENT( N::D )
>>>
>>> You also need to include the boost::archives you're using in D.hpp, since
>>> this is the obscure way Boost.Serialization instantiates code for your
>>> class.
>>> Regards,
>>> Júlio.
>>>
>>> 2011/8/12 Jari <jaristr_at_[hidden]>
>>>>
>>>> I'm using  1.46.1.
>>>>
>>>> So I must use  EXPORT_KEY and EXPORT_IMPL ?
>>>>
>>>>
>>>>
>>>> On Fri, Aug 12, 2011 at 7:33 AM, Robert Ramey <ramey_at_[hidden]> wrote:
>>>> > Jari wrote:
>>>> >> Ok I tried one test code and it worked, but when I moved the all the
>>>> >> classes in header file and but the export macro in cpp file it fails
>>>> >> with "derived class not registered or exported".
>>>> >>
>>>> >> Then I moved the export macros to main.cpp right before main() and
>>>> >> before the saving/loading calls, and that did the trick.
>>>> >>
>>>> >> So it seems export's need to be in same CPP file where the
>>>> >> loading/saving starts?
>>>> >> Or is it in same cpp where the function is?
>>>> >>
>>>> >> Im using visual studio 10 express
>>>> >
>>>> >
>>>> > The question of export being in the *.ccp and/or in the header
>>>> > was a confusion which has only been resolved in recent
>>>> > versions of the library.  Now there is EXPORT_KEY
>>>> > and EXPORT_IMPL... Which resolves the ocnfusion.
>>>> > I don't know which version of boost you're using so
>>>> > I don't know if this addresses your issue or not.
>>>> >
>>>> > Robert Ramey
>>>> >
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > Boost-users mailing list
>>>> > Boost-users_at_[hidden]
>>>> > http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>>> >
>>>> _______________________________________________
>>>> Boost-users mailing list
>>>> Boost-users_at_[hidden]
>>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>>
>>>
>>> _______________________________________________
>>> 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