[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