【发布时间】:2019-04-10 11:44:27
【问题描述】:
我正在尝试将 C 函数转换为 python 3.6 使用。
代码如下:
lib = ctypes.WinDLL('ftrScanAPI.dll') # provided by fingerprint scanner
class FTRSCAN_IMAGE_SIZE(ctypes.Structure):
_fields_ = [
("nWidth", ctypes.c_int),
("nHeight", ctypes.c_int),
("nImageSize", ctypes.c_int)
]
print('Open device and get device handle...')
hDevice = lib.ftrScanOpenDevice()
print('handle is', hDevice)
print('Get image size...')
Image_size = FTRSCAN_IMAGE_SIZE(0, 0, 0)
if lib.ftrScanGetImageSize(hDevice, ctypes.byref(Image_size)):
print('Get image size succeed...')
print(' W', Image_size.nWidth)
print(' H', Image_size.nHeight)
print(' Size', Image_size.nImageSize)
else:
print('Get image size failed...')
函数定义:
typedef struct FTR_PACKED __FTRSCAN_IMAGE_SIZE {
int nWidth;
int nHeight;
int nImageSize;
} FTRSCAN_IMAGE_SIZE, *PFTRSCAN_IMAGE_SIZE;
FTRHANDLE ftrScanOpenDevice(); # typedef void * FTRHANDLE;
BOOL ftrScanGetImageSize(FTRHANDLE ftrHandle,
PFTR_SCAN_IMAGE_SIZE pImageSize);
但使用相同代码的不同操作系统似乎有不同的结果:
我不打印“句柄在这里”
我尝试过的:
根据堆栈溢出的一些答案,这可能是由于没有明确分配函数 argtypes 和 restype 造成的,所以我尝试并失败了。
【问题讨论】:
-
你能贴出代码吗?
-
我重新编辑了帖子,看看有没有不清楚的地方?谢谢
-
是的,你可能是对的。你的 python 是 64 位的?您能否同时发布 2 个函数原型(在 C 中)以及
FTRSCAN_IMAGE_SIZE?我怀疑hDevice = lib.ftrScanOpenDevice()截断了这个值。 stackoverflow.com/questions/52268294/…。还请发布您分配 argtypes 和 restype 的代码块。 -
a) 请 no 图片。您必须将输出作为文本复制到您的问题中。第二个输出也与您的代码不匹配! (不打印句柄!)
标签: python c python-3.x windows ctypes