"Georg" <nob...@nowhere.org> wrote in message news:7qo9avfiv...@mid.individual.net...
Hi Mark,

Are you passing in these values, or are they being returned? To me the depth of the pointer references implies numVars, varNames, and varTypes are out parameters. I'll assume that for now. If they are in/out parameters let me know.

If these parameters were in parameters. What would I have to do different?

If you are passing in the values, you can remove a level of * referencing, since the parameters aren't being modified. Note the syntax to create an array: (type * length)(initializers...):

--------------- func.c --------------------
#include <stdio.h>

__declspec(dllexport) void func(int numVars, char **varNames, int *varTypes)
{
   int i;
   printf("numVars = %d\n",numVars);
   for(i = 0; i < numVars; i++)
       printf("%d: %s\n",varTypes[i],varNames[i]);
}

--------------- func.py ------------------
import ctypes as c

# int func (int numVars, char **varNames, int *varTypes)

INT = c.c_int
PINT = c.POINTER(INT)
PCHAR = c.c_char_p
PPCHAR = c.POINTER(PCHAR)

func = c.CDLL('func').func
func.restype = None
func.argtypes = [INT,PPCHAR,PINT]

numVars = 3
varNames = (PCHAR * numVars)('abc','def','ghi')
varTypes = (INT * numVars)(1,2,3)

func(numVars,varNames,varTypes)

--------------- OUTPUT ---------------
numVars = 3
1: abc
2: def
3: ghi
--------------------------------------------

-Mark


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to