我正在开发一个python程序,需要从imprex卡(HD-SDI Express VCE-HDEX03)检索视频流。我用ctypes(cdll.LoadLibrary())加载SDK DLL
我有一个函数的通讯问题。 根据DOC,如果我在C++中编码,应该这样做:
VCESDI_EnumData enumData;
enumData.cbSize = sizeof(VCESDI_EnumData);
VCESDI_ENUM hDevEnum = VCESDI_EnumInit();
while(VCESDI_EnumNext(hDevEnum, &enumData) == VCESDI_Err_Success)
{
// Do some stuff
}
我从代码中的以下函数获得第一个参数:
hDevEnum = wintypes.HANDLE(lib.VCESDI_EnumInit()) # hdevEnum = 0 if no card connected otherwise a random number (always around 8000000)
在文档中,VCESDI\u EnumData的声明如下:
struct VCESDI_EnumData
{
UINT32 cbSize; //Size of structure. Should be initialized to sizeof(VCESDI_EnumData) before passing to VCESDI_EnumNext function
UINT32 dwSlot; //System defined slot number
VCESDI_DeviceData; //Pointer to device initialization data
LPCWSTR pSlotName; //Pointer to system defined slot name
}
我创建第二个参数如下:
class VCESDI_EnumData(ct.Structure):
_fields_ = [("cbSize", ct.c_int),
("dwSlot", ct.c_int),
("deviceData", ct.c_void_p),
("pSlotName", ct.c_void_p)]
剩下的代码是:
enumData = VCESDI_EnumData()
enumData.cbSize = ct.sizeof(VCESDI_EnumData)
hDevEnum = wintypes.HANDLE(lib.VCESDI_EnumInit())
while lib.VCESDI_EnumNext(hDevEnum, ct.byref(enumData)) == 0:
continue
最后,当我启动代码时,出现以下错误:
File "HD-SDI_script.py", line 39 in <module>
while lib.VCESDI_EnumNext(hDevEnum, ct.byref(enumData)) == 0:
ValueError: Procedure called with not enough arguments (8 bytes missing) or wrong calling convention
知道问题出在哪里吗
如果是32位代码,请使用
WinDLL
而不是CDLL
加载库。在64位上,它们是相同的调用约定,这不重要,但32位则不重要相关问题 更多 >
编程相关推荐