Hi,

I have a question about ctypes. I am trying to call a C function but I am not 
able to construct the arguments in ctypes. I need to construct two pointers. 
Each is a pointer to an array of pointers to character values. I did it like 
this (I tried numerous ways; this seemed the cleanest way):
>>> MAXSIZE = 10
>>> valueArrayPtr = ctypes.POINTER(ctypes.c_char_p) * MAXSIZE
>>> valueArrayPtr
<class '__main__.LP_c_char_p_Array_10'>
>>> valueArrayPtrPtr = ctypes.POINTER(valueArrayPtr)
>>> valueArrayPtrPtr
<class '__main__.LP_LP_c_char_p_Array_10'>
>>> 


But this yields an error: <type 'exceptions.TypeError'>: Don't know how to 
convert parameter ..

Any idea what I am doing wrong? Below is more complete code.
And once it works, can I simply use the ctypes as an iterable to retrieve the 
values?


Thanks in advance!
Albert-Jan


import ctypes

def getValueLabels(self, varName):

    MAXSIZE = 10

    # Pointer to array of pointers to values
    valueArrayPtr = ctypes.POINTER(ctypes.c_char_p) * MAXSIZE
    valueArrayPtrPtr = ctypes.POINTER(valueArrayPtr)
    
    # Pointer to array of pointers to labels
    labelArrayPtr = ctypes.POINTER(ctypes.c_char_p) * MAXSIZE
    labelArrayPtrPtr = ctypes.POINTER(labelArrayPtr)

    # Pointer to number of values or labels
    numLabels = ctypes.c_int()
    numLabelsPtr = ctypes.byref(numLabels)
    
    # call C function with the following prototype:
    # int GetValueLabels(int handle, const char *varName, char ***values, char 
***labels, int *numLabels)
    retcode = self.theLib.GetValueLabels(self.fh, varName, valueArrayPtrPtr, 
labelArrayPtrPtr, numLabelsPtr)
    # yields ArgumentError: argument 3: <type 'exceptions.TypeError'>: Don't 
know how to convert parameter 3


Description

This function gets the set of labeled values and associated labels for a short 
string
variable. The number of values is returned as *numLabels. Values are stored 
into an
array of *numLabels pointers, each pointing to a char string containing a 
nullterminated
value, and *values is set to point to the first element of the array. Each value
string is as long as the variable. The corresponding labels are structured as 
an array of
*numLabels pointers, each pointing to a char string containing a 
null-terminated label,
and *labels is set to point to the first element of the array. 
Parameter Description
handle Handle to the data file
varName Variable name
values Pointer to array of pointers to values
labels Pointer to array of pointers to labels
numLabels Pointer to number of values or labels


 
Cheers!!
Albert-Jan


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public 
order, irrigation, roads, a fresh water system, and public health, what have 
the Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to