--- In gsoap@yahoogroups.com, "alestrcek" <alestr...@...> wrote:
>
> [bump]
> No one has worked with xsd__base64Binary before?
> [/bump]
> 
> Regards,
> Ales
> 
> --- In gsoap@yahoogroups.com, "alestrcek" <alestrcek@> wrote:
> >
> > Hi all,
> > 
> > I have SOAP server code, which sends file(s) back to the client upon WS 
> > request. Data is xsd__base64Binary object, which - as all other gSOAP 
> > arrays - has a member for data -> char* __ptr and member for data size -> 
> > int __size. This class was generated from wsdl, in which I defined the data 
> > as xsd:base64Binary.
> > In my code, I read the file into unsigned char*, and I want copy it to the 
> > __ptr member of the xsd__base64Binary object. Since this object is 
> > allocated on stack, all I have to do is memcpy my data to __ptr, and set 
> > __size. Everything works and is OK, however the problem is that I see no 
> > way of freeing the memory for __ptr. If I wish to copy the data into it, I 
> > must allocate memory, and gSOAP does not provide any wrapper for char* 
> > memory allocation (like soap_new_ns1__someClass(...)) They exist for custom 
> > objects, strings, dates, decimals etc. but none for char*. There is a 
> > wrapper function for xsd__base64Binary, but it does not allocate memory for 
> > __ptr. So I have no other option, than to call:
> > this->fileData->File->Data.__ptr = new char[data_len];
> > Then, there is no way to 'manually' delete this char*. xsd__base64Binary's 
> > desctructor is already defined in stub header (virtual ~xsd__base64Binary() 
> > { }), and when I leave the scope of this SOAP method, I have no control 
> > over objects that were left on heap.
> > 
> > So... how to allocate memory via gSOAP's internal 'garbage collector', or 
> > how to free this memory allocated with new? I can't believe that no one 
> > thought of this problem with xsd__base64Binary class? I also didn't find 
> > any samples for server code, only client.
> > 
> > Thanks for any answers.
> > 
> > Regards,
> > Ales
> >
>

Sorry there.....Didn't see this question:

gSOAP provides a raw malloc function for you to use for stuff like this.  It's 
called soap_malloc().

>From the FAQ:http://www.cs.fsu.edu/~engelen/soapfaq.html
void *soap_malloc(size_t n); // gSOAP 1.X
void *soap_malloc(struct soap *soap, size_t n); // gSOAP 2.X

Use those to allocate arbitrary sized datastructures that are still garbage 
collected etc.



Reply via email to