在Python 2.7中使用ctypes调用DLL

1 投票
2 回答
1409 浏览
提问于 2025-04-17 08:51

我在使用DLL文件时遇到了问题。下面是我用的代码。我查了DLL的手册,上面写了函数的签名。我的代码是用Python 2.7写的。

from ctypes import *
mtrs= windll.LoadLibrary("mtrs.dll")
mtrs.sw_Open("SystemWorks", 0, c_ulong( 0x100 | 0x10000), None, None)
0

在DLL手册中,它写了函数的签名。

DLLINOUT BOOL WINAPI sw_Open(LPCSTR DeviceName, ULONG DeviceNumber, ULONG OpenFlags, void * Arg1, void * Arg2 );

如果设备没有打开,函数会返回false。

参数有没有错误呢?

2 个回答

0

如果你在用Python 3.x版本,应该使用b"SystemWorks",因为第一个参数的类型是LPCSTR

0

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实大多数时候,解决方案是可以通过一些简单的步骤找到的。

比如,当你在写代码时,如果出现了错误,首先要检查你的代码是否有拼写错误,或者是否漏掉了某些符号。很多时候,问题就出在这些小细节上。

另外,了解你使用的工具的文档也是非常重要的。文档通常会提供很多有用的信息,比如如何使用某个功能,或者如何解决常见的问题。

如果你在网上寻找帮助,比如在StackOverflow上提问,记得描述清楚你的问题,包括你遇到的错误信息和你尝试过的解决方法。这样,别人才能更好地帮助你。

总之,编程过程中遇到问题是很正常的,保持耐心,多尝试,多查资料,最终你会找到解决办法的。

#!/usr/bin/env python3
from ctypes import *
mtrs= windll.LoadLibrary("mtrs.dll")
mtrs.sw_Open.argtypes = [c_char_p, c_ulong, c_ulong, c_void_p, c_void_p]
mtrs.sw_Open.restype = c_bool
mtrs.sw_Open(b"SystemWorks", c_ulong(0), c_ulong( 0x100 | 0x10000), None, None)

撰写回答