[PythonCE] pass Python string to C char *
Alexandre Delattre
alexandre.delattre at enst-bretagne.fr
Fri Aug 22 15:42:17 CEST 2008
> Well, it works! I realised I had not updated the DLL on my device (that's
> what comes of working late). Just for the record, I have tested two
methods,
> and both work fine to pass a string to a C dll requiring a char * input:
1. use mystr1=c_char_p("mystring")
2. use mystr2=create_string_buffer("mystring")
> Both methods require the ctypes module and work equally well with the
DLL,
> but there are some differences (all of which I am not aware at the
moment).
> Method 1 creates a ctypes Array object, whereas method 2 appears to
create
> something which behaves more like a standard Python string.
From my experience, it sounds to me that c_char_p creates a wrapper
over an existing python string that is suitable for being passed as
argument in a ctypes dll function.
create_string_buffer will duplicate the content of the string in an
internal buffer and the resulting object will provide a fixed-length
array interface to modify this buffer from python.
This one should be used when the c function will modify the char*
argument in place (i.e. write directly in this buffer). Since python
strings are supposed to be immutable (with the benefit of being hashable
and so insertable as keys in a dict) first method should not be used here.
cheers,
Alexandre
More information about the PythonCE
mailing list