Working with ctypes and char** data type

P

Philluminati

I'm a bit of a python newbie and I need to wrap a C library.

I can initialise the library using CDLL('mcclient.so')

and I can call functions correctly inside the library but I need to
invoke one function which has this function definition:

char ** CAPAPI McSearch(HMCLINK Handle,
short nSearchType,
short nNoSelect,
char **pSelect,
short nNoWhere,
char **pWhere,
char **pData,
int iTimeout);

For **pSelect I want to pass in an array of char points, which in C
would be declared as

char *pData[] = { "ADDR", "POSTCODE" };

Can someone tell me how use pointers + char pointers together in
python with ctypes please?

Thank you

Phill
 
T

Thomas Heller

Philluminati said:
I'm a bit of a python newbie and I need to wrap a C library.

I can initialise the library using CDLL('mcclient.so')

and I can call functions correctly inside the library but I need to
invoke one function which has this function definition:

char ** CAPAPI McSearch(HMCLINK Handle,
short nSearchType,
short nNoSelect,
char **pSelect,
short nNoWhere,
char **pWhere,
char **pData,
int iTimeout);

For **pSelect I want to pass in an array of char points, which in C
would be declared as

char *pData[] = { "ADDR", "POSTCODE" };

Can someone tell me how use pointers + char pointers together in
python with ctypes please?

# create an array that holds two pointers to 'char *', and fill it with data:
pData = (c_char_p * 2)()
pData[0] = "ADDR"
pData[1] = "POSTCODE"

# Another way:
pData = (c_char_p * 2)("ADDR", "POSTCODE")

Thomas
 
P

Philluminati

Philluminati schrieb:


I'm a bit of a python newbie and I need to wrap a C library.
I can initialise the library using CDLL('mcclient.so')
and I can call functions correctly inside the library but I need to
invoke one function which has this function definition:
char ** CAPAPI McSearch(HMCLINK Handle,
                        short nSearchType,
                        short nNoSelect,
                        char **pSelect,
                        short nNoWhere,
                        char **pWhere,
                        char **pData,
                        int iTimeout);
For **pSelect I want to pass in an array of char points, which in C
would be declared as
char *pData[] = { "ADDR", "POSTCODE" };
Can someone tell me how use pointers + char pointers together in
python with ctypes please?

# create an array that holds two pointers to 'char *', and fill it with data:
pData = (c_char_p * 2)()
pData[0] = "ADDR"
pData[1] = "POSTCODE"

# Another way:
pData = (c_char_p * 2)("ADDR", "POSTCODE")

Thomas

Thank you Thomas for your reply. I also got it working in a slightly
less sophisticated manor like this:

SelectType = c_char_p * 2
select = SelectType("ADDR", "POSTCODE")
ptr = pointer(select)

Anyway, thanks for taking the time to reply!

Phill
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top