ctypes and unsigned char*
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Wed Aug 22 23:46:46 EDT 2007
En Mon, 20 Aug 2007 08:30:50 -0300, oliver.andrich at gmail.com
<oliver.andrich at gmail.com> escribi�:
> On 19 Aug., 20:40, Gabriel Genellina <gagsl-... at yahoo.com.ar> wrote:
>> In the first case, use a plain c_char_p - the individual "chars" are
>> already unsigned in Python (that is, ord(xxx[i]) is always positive)
>> In the second case, first define the pointer type:
>>
>> c_ubyte_p = POINTER(c_ubyte)
>> your_function.restype = c_ubyte_p
>
> I will have to look into that. My function I want to wrap has the
> following signature
>
> unsigned char *MagickGetImageProfile(MagickWand *wand,const char
> *name,
> size_t *length)
>
> Well, the first argument and the second are straight forward, and work
> as expected. The last argument also works and it should take up the
> length of the string (unsigned char *). If I now do
So, if I understand correctly, after the call, *length will contain the
length of the buffer pointed by the function result.
> dll.MagickGetImageProfile.restype = c_char_p
> result = dll.MagickGetImageProfile(wand, "8bim", byref(length))
>
> result is either an empty string or a 3 bytes long string, while
> length containes the correct length of 1086 bytes for example. I also
> tried
If the result can contain nul bytes, you have to specify its size
explicitely (else it will be truncated at the first zero). Use the
string_at utility function:
result_str = string_at(result, length)
(That should work fine, I presume...)
--
Gabriel Genellina
More information about the Python-list
mailing list