我刚接触Python。我正试图通过它的DLL库连接到一个激光传感器。这个库中的SDK函数是用C++语言编译的。你知道吗
通过在python中使用ctypes,我的第一个尝试是调用EthernetScanner\u Connect函数。功能参数如下:
void* EthernetScanner_Connect(char *chIP, char *chPort, int iTimeOut)
根据c++中的函数描述,如果连接失败,它应该返回空指针,否则它应该将句柄返回给profile sensor,这将在其他函数中使用。你知道吗
我的python代码到现在为止:
from ctypes import *
lib=windll.LoadLibrary("c:\\EthernetScanner.dll")
if lib:
print("the Library is loaded")
EthernetScanner_Connect = getattr(lib,"EthernetScanner_Connect")
EthernetScanner_Connect.restype = c_void_p
EthernetScanner_Connect.argtypes =[c_char_p,c_char_p,c_int]
x = EthernetScanner_Connect(b"193.164.200.1\0",b"32407\0",0)
print(x)
因为我还没有连接到传感器,所以我希望该函数为空,但它给出了以下信息:
the Library is loaded
45940800
我想先指出[Python 3.Docs]: ctypes - A foreign function library for Python。你知道吗
我将根据一些假设发布一个答案:
根据上面的文档,EthernetScanner\u GetConnectStatus可能的返回状态是(emphasis是我的):
基于上述情况,以及连接超时为0的事实,我假设(文档中没有任何内容支持它)它尝试以非阻塞模式连接:
下面是一段应该用来处理这个问题的代码(不用说这是盲编码,意思是我实际上没有测试它)。
根据2nd假设,如果传递的超时大于0,EthernetScanner\u Connect应返回NULL。你知道吗
代码.py:
相关问题 更多 >
编程相关推荐