My study of this language was started today. And while my knowledge base is somewhere between zero and void I already can ask stupid qustions, which were not answered on #python / irc.freenode.net
What python type to use when c++ to python boost::python binding requires 'unsigned char *' parameter?
Code snippet will tell much more:
class test_class : public test_class_base {
public:
test_class(const char *path);
virtual ~test_class();
virtual void log(const char *msg);
unsigned char test(unsigned char *ptr) { return *ptr; };
private:
std::ofstream *stream;
};
....
class_ >("test_class", init())
.def("log", &test_class::log, &test_class_wrap::default_log)
.def("test", &test_class::test)
;
I ommitted wrapper class definition, since it is not critical. It works for python-string to c++ 'const char *' transform, but unsigned char pointer fires up an error. I tried both struct.unpack_from("P", array) and array.buffer_info()[0], but python says that they both return 'int' while c++ code expects 'unsigned char *':
id = array('B')
for x in xrange(0, 20) :
id.append(x)
s = struct.unpack_from("P", id);
print hex(s[0])
t = test_class("/dev/stderr")
print hex(t.test(s[0]))
error:
[zbr@baccara python]$ ./test.py
0x3020100
Traceback (most recent call last):
File "./test.py", line 19, in
print hex(t.test(s[0]))
Boost.Python.ArgumentError: Python argument types in
test_class.test(test_class, int)
did not match C++ signature:
test(test_class {lvalue}, unsigned char*) Code snippets can be also found at http://paste.pocoo.org/show/239085/.
If no solution will be found, I will refactor elliptics python binding to support new classes for missing types like 'elliptics_id' for 'unsigned char *'.
See Pyrex: http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Makes interfaces to C really simple.
C++ bindings should be straightforward to port to other languages like Java
Why do you want python? I've had to deal with it due to different reasons, and each time I hate it more.
I would recommend Ruby instead, I've found it very straight-forward to create bindings from C, and the language itself is a delight.
Python is the most popular scripring language