Hi, I am currently dealing with ctypes, interfacing with winscard libbrary (for smart card access).
Several APIs (e.g. SCardListReaderGroupsW ) take a pointer to an unicode string as a parameter , which points at function return to a "sequence" of unicode strings, NULL terminated. The last string is double NULL terminated. (of course buffer length is also returned as another parameter). e.g. it could return something like 'group1\x00group2\x00group3\x00\x00' What should I use as argtypes to my function prototype in order to gain access to the full list? using c_wchar_p works, but it resolves the string until it reaches the first \x00, resulting in having access to the first entry of the list only. as reference, my current ctypes mapping for this API is: # extern WINSCARDAPI LONG WINAPI # SCardListReaderGroupsW( # IN SCARDCONTEXT hContext, # OUT LPWSTR mszGroups, # IN OUT LPDWORD pcchGroups); _ListReaderGroups = scardlib.SCardListReaderGroupsW _ListReaderGroups.argtypes = [ c_ulong, c_void_p, c_void_p ] _ListReaderGroups.restype = c_ulong Calling the API looks like: pcchreadergrp = c_long(SCARD_AUTOALLOCATE) groups = c_wchar_p() _ListReaderGroups( ctx, byref(groups), byref(pcchreadergrp)) Should I be using some array/ctypes.cast() combination to gain access to all returned characters? -- http://mail.python.org/mailman/listinfo/python-list