调用一个带有ctypes指针的dll函数。 Python

时间:2019-02-13 11:12:16

标签: python pointers dll ctypes handle

我正在尝试对连接到放大器(DLPCA-200)的LUCI-10 FEMTO USB控制器进行编程。我正在使用ctypes来访问制造商在.dll文件中提供的功能。我需要获取有关引脚5的状态的信息。

我已经建立了通信,我可以执行所有功能而没有任何错误,但是需要指针的函数仅返回错误状态码(无错误),而不返回它们应该返回的实际值(如状态或标识)。我附上一些功能信息:

FEMTO_LUCI10_API int EnumerateUsbDevices();

我得到的索引是:1

FEMTO_LUCI10_API int ReadAdapterID(int index, int *id);

FEMTO_LUCI10_API int WriteAdapterID(int index, int id);

FEMTO_LUCI10_API int WriteData(int index, int data_low, int data_high);

FEMTO_LUCI10_API int GetStatusPin5(int index, int *status);   

import ctypes
from ctypes import *
libc5=CDLL("C:\Program Files (x86)\FEMTO\LUCI-10\Driver\LUCI_10.dll")
libc5.EnumerateUsbDevices(None)
libc5.WriteData(1,0x8,0)
libc5.WriteAdapterID(1,0xff)

我执行这些没有问题。问题出现在以下时间:

libc5.GetStatusPin5(1,0x4cd8430)

如果我使用的函数没有指针,它只会返回错误代码0。如果我输入其他任何数字,我都会得到:

  

WindowsError:异常:写入0x0000000的访问冲突。

我将CDLL功能提供的句柄用作指针,但仍然没有得到除错误状态以外的任何回报。

我希望它在过载时会得到1,但是我只会得到0来表明设备正常。我检查了一下,它返回的是Luci的状态,而不是引脚5的状态。我还附加了错误返回码:

// Error return codes

define LUCI_OK 0 // Function returns successful

define LUCI_ERROR_INDEX -1 // Error, selected LUCI-10 not in list

define LUCI_ERROR_HID -2 // Error, LUCI-10 doesnt respond

// return value of GetStatusPin (D-Sub pins 5,6,7)

define STATUS_PIN_LOW 0 // probed Pin is logical 0 (TTL low 0 Volt)

define STATUS_PIN_HIGH 1 // probed Pin is logical 1 (TTL high 5 Volt)

预先感谢

0 个答案:

没有答案