hero...@gmail.com wrote:
I am trying to interface a binary file library using py++.
There is a function in the library like
int read(void* buffer, size_t len)
which is hard to wrap. It read a piece (size len) of the file, and store
it in buffer, and then return the buffer length (most likely equal to len).
You want to write a C++ wrapper function something like this:
std::string wrapped_read(size_t len)
{
// manually allocate buffer of size 'len',
// e.g. by using std::vector<char>
int bytes_read = read(buffer, len);
return std::string(buffer, bytes_read);
// If you literally used 'new' or 'malloc' to obtain your 'buffer',
// rather than a type such as std::vector which will release
// its dynamic memory automatically, of course the 'return'
// above would leak 'buffer'. In that case you'd have to declare
// std::string result(buffer, bytes_read);
// ...manually release 'buffer'...
// return result;
}
Then wrap the C++ function wrapped_read() as the Python function "read".
Boost.Python is very happy passing std::string in either direction.
Trying to directly use char* or void* buffers is perilous and will, as
you remark, make the consumers of your library unhappy.
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig