Hello all, I'm trying to use the ctypes module to call functions in a DLL. I've figured out how to modify my path so the library is found, and I can call LoadLibrary on it, but one of the functions expects an array of POINTS. Here is the prototype from the .h file:
TRACKER_API HRESULT InitializeMask(HANDLE pHandle, int nWidth, int nHeight, POINT* ptMasks, int nNumPoints); I did a from ctypes.wintypes import * Here's my test script: ############## ''' Created on Aug 23, 2012 @author: williams ''' import os import numpy as np import scipy.io from ctypes import * from ctypes.wintypes import * matdata = scipy.io.loadmat(os.path.join(os.environ['userprofile'],'Desktop','S31_f1.mat')) data = matdata['data'] nHeight,nWidth = data.shape pth = os.environ['path'].split(';') pth.append(os.path.join(os.environ['userprofile'],'My Documents','DLLs')) os.environ['path'] = ';'.join(pth) tck=oledll.LoadLibrary('Tracker') hTrkr = tck.CreateTracker() maskImage = np.zeros((1024,1280),dtype='int32') maskImage[300:305,100:105] = True idx = np.array(maskImage.nonzero()) nPoint = idx.shape[1] ptMaskType = nPoint * POINT pts = zip(idx[1,:],idx[0,:]) ptMasks = ptMaskType(*pts) tck.InitializeMask.argtypes=(HANDLE, c_int, c_int, c_void_p, c_int) InitMaskResult = tck.InitializeMask(hTrkr, nWidth, nHeight, ptMasks, nPoint) if __name__ == '__main__': pass ############## so I have the POINT class, and I've created the array of POINTs. When I try to call this function, I get this message: >>> InitMaskResult = tck.InitializeMask(hTrkr, nWidth, nHeight, ptMasks, nPoint) Traceback (most recent call last): File "<console>", line 1, in <module> ValueError: Procedure probably called with too many arguments (20 bytes in excess) This is the first time that I've tried to use the ctypes module, so any help is appreciated. TIA, -- http://mail.python.org/mailman/listinfo/python-list