我是python中的新手,最近使用python编程CCD相机拍照。我想使用ctypes调用.so文件中的函数。 该函数的原型是:
INT is_ImageFile (HIDS hCam, UINT nCommand, void* pParam, UINT cbSizeOfParam)
HIDS是uint类型。正式给出c代码的例子是:
is_ImageFile(m_hCam, IS_IMAGE_FILE_CMD_SAVE, (void*)&ImageFileParams,
sizeof(ImageFileParams));
其中ImageFileParams是结构类型:
typedef struct{
wchar_t* pwchFileName;
UINT nFileType;
UINT nQuality;
char** ppcImageMem;
UINT* pnImageID;
BYTE reserved[32];}IMAGE_FILE_PARAMS;
在我的.py文件中,我试图以这种方式定义结构:
class IMAGE_FILE_PARAMS(Structure):
_fields_=[("pwchFileNmae",c_wchar_p),("nFileType",c_uint),("nQuality",c_uint),("ppcImageMem",POINTER(c_char_p)),("pnImageID",POINTER(c_char_p)),("reserved",c_byte*32)]
以这种方式定义一些成员:
ImageFileParams.pwchFileName = c_wchar_p("/home/user/aa.jpg")
ImageFileParams.nQuality=c_uint(80)
ImageFileParams.nFileType=c_uint(1)
然后调用函数:
is_ImageFile(hCam, IS_IMAGE_FILE_CMD_SAVE, cast(pointer(ImageFileParams),c_void_p),c_uint(sizeof(ImageFileParams)))
但是我总是得到一个错误,表明参数无效。问题是什么?
答案 0 :(得分:0)
我认为你因为最后一个参数而得到了无效的参数错误:
c_uint(sizeof(ImageFileParams))
我在他们的IDS网站上查看了文档和some example codes,我认为您需要这样调用它(假设您导入了他们的ueye
库:
is_ImageFile(hCam, ueye.IS_IMAGE_FILE_CMD_SAVE, ImageFileParams,ueye.sizeof(ImageFileParams))