En Mon, 20 Aug 2007 08:30:50 -0300, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escribi�:
> On 19 Aug., 20:40, Gabriel Genellina <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list