Thanks everyone, unfortunatly I'm still stuck..... @ Stephane, this is what I'm doing, but it's not working: sizeof( test.A ) + sizeof( double ) * test.A.size() + sizeof( test.B ) + sizeof( double ) * test.B.size() + sizeof( bool ) * 2
@ Guillame Thanks, I tryed your example but I'm probably doing it the wrong way: Foo Test; //Set some values Test.A->pushback(12); Test.B->pushback(24); Test.B->pushback(32); Test.C->pushback(true); Test.D->pushback(false); myMap.PutItemValue( i, (unsigned char*)&Test, sizeof( Foo )) ; // Get them back const unsigned char* pInternalData = NULL ; UINT cntData = 0 ; myMap.GetItemValue( 0, pInternalData, cntData ) ; Foo *pData = (Foo*) pInternalData ; if(pData) { Application().LogMessage("nb "+CString(pData->A->size())); } this return empty vector.... @MAB Could you point me to some ressources on the web about this? Thanks!! ----------------------------------------------- Ahmidou Lyazidi Director | TD | CG artist http://vimeo.com/ahmidou/videos http://www.cappuccino-films.com 2013/6/10 Marc-Andre Belzile <marc-andre.belz...@autodesk.com> > Alternatively, you could store C++ buffers in your struct instead of > std::vector objects. Then if you need to access your data with stl, just > assign each buffer to an std::vector out from these buffers. > > If you can't afford the extra copy performed by std::vector constructor, > you'll need to implement your own wrapper class deriving from std::vector > that nulls out the internal container upon destruction. > This is required to avoid std::vector to deallocate your buffer memory. > > Of course I haven't tested this solution yet but it should work. :) > > -mab > > From: softimage-boun...@listproc.autodesk.com [mailto: > softimage-boun...@listproc.autodesk.com] On Behalf Of Guillaume Laforge > Sent: Sunday, June 09, 2013 3:29 PM > To: softimage@listproc.autodesk.com > Subject: Re: [C++] Store a structure of vector in a UserData > > Well, if you need the exact number of bytes, you will need to take into > account the size of std::vector objects I think :). > > > On Sun, Jun 9, 2013 at 10:07 AM, Stephan Woermann < > swoerman...@googlemail.com<mailto:swoerman...@googlemail.com>> wrote: > To get the total size of the struct, this should work: > > Foo test; > sizeof( double ) * test.A.size() + sizeof( double ) * test.B.size() + > sizeof( bool ) * 2 > Stephan > > 2013/6/9 Guillaume Laforge <guillaume.laforge...@gmail.com<mailto: > guillaume.laforge...@gmail.com>> > Hi Ahmidou :), > > You could try to use pointers to std::vector. This way you will be able to > access those vector and get the double values correctly. > But you must handle the allocation/deallocation of those vectors by > yourself: > > struct Foo{ > std::vector<double> *A; > std::vector<double> *B; > bool C; > bool D; > > Foo() > { > A = new std::vector<double>; > B = new std::vector<double>; > } > ~Foo() > { > delete A; > delete B; > } > }; > > Hope this help, > > Guillaume > > On Sun, Jun 9, 2013 at 8:07 AM, Ahmidou Lyazidi <ahmidou....@gmail.com > <mailto:ahmidou....@gmail.com>> wrote: > Hi List, > Is it possible to store this kind of struct in a UserData (map or blob): > > struct Foo{ > std::vector<double> A; > std::vector<double> B; > bool C; > bool D; > }; > I can pull out the structure, and the vectors have the good number of > item...but they are empty, the values are gone > > I'm not sure, but I think it's lost because of the size parameter in > UserDataMap.PutItemValue > I tried to set the real size ( sizeof(vector)+ > sizeof(double)*vector::size() ) but this gave me some crazy results. > Any idea? > Thanks > > ----------------------------------------------- > Ahmidou Lyazidi > Director | TD | CG artist > http://vimeo.com/ahmidou/videos > http://www.cappuccino-films.com > > > >