首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ctype导入dll函数

使用ctype导入dll函数
EN

Stack Overflow用户
提问于 2020-02-26 16:20:55
回答 1查看 127关注 0票数 1

我需要做一个VB6程序到python的移植。此程序,使用DLL与Bentel Kyo防盗控制单元进行通信。在VB6中,我以这种方式声明函数:

代码语言:javascript
复制
Public Declare Function PanelConnection Lib "C:\SupervisioneCasa\BisKyoUnit.dll" (ByVal Comando As Long, ByVal Porta As Byte, tentativi, ByRef pin As Byte, ByVal LenPin As Byte, ByRef presult As Byte) As Byte

并以这种方式调用函数:

代码语言:javascript
复制
ExitCode = PanelConnection(&H302, 1, 1, 0, 0, Buffer(0))

我尝试这样翻译python中的VB6代码:

代码语言:javascript
复制
import ctypes

hllDll = ctypes.WinDLL ("c:\\Appoggio\\BisKyoUnit.dll")

array_type = ctypes.c_byte * 255
Buffer = array_type()

hllApiProto = ctypes.WINFUNCTYPE (
    ctypes.c_byte,      # Return type.
    ctypes.c_long,   # Parameters 1 ...
    ctypes.c_byte,
    ctypes.c_int,
    ctypes.c_byte,
    ctypes.c_byte,
    ctypes.c_byte)   # ... thru 6.
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3",0), (1, "p4",0), (1, "p5",0), (1, "p6",0),

hllApi = hllApiProto (("PanelConnection", hllDll), hllApiParams)

p1 = ctypes.c_long (302)
p2 = ctypes.c_byte (1)
p3 = ctypes.c_int (1)
p4 = ctypes.c_byte (0)
p5 = ctypes.c_byte (0)
p6 = ctypes.c_byte (Buffer)
hllApi (p1, p2, p3, p4, p5, p6)

但是当我尝试运行py时,我得到了这个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "y:\Downloads\Python\Bentel.py", line 28, in <module>
    p6 = ctypes.c_byte (Buffer)
TypeError: an integer is required

我哪里错了?有人能帮我吗?谢谢。

尤里

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 15:04:36

我试着用这种方式重写函数:

代码语言:javascript
复制
import ctypes

dll = ctypes.windll.LoadLibrary("c:\\Appoggio\\BisKyoUnit.dll")

py_swe_calc_ut = dll.PanelConnection
py_swe_calc_ut.argtypes = [ctypes.c_long, ctypes.c_byte, ctypes.c_int, ctypes.c_byte, ctypes.c_byte, ctypes.POINTER(ctypes.c_byte*255)]
py_swe_calc_ut.restype = None

returnarray = (ctypes.c_byte * 255)()

ExitCode = py_swe_calc_ut(302, 1, 1, 0, 0, returnarray)

这样,就不会返回错误。但在实践中,调用并不起作用。在returnarray中不返回任何内容。有什么帮助吗?谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60409555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档