从 Python
--- 中使用 DLL
文件的最简单方法是什么?
具体来说,如何在 不 编写任何额外的包装器 C++
代码以将功能公开给 Python
的情况下做到这一点?
本机 Python
功能比使用第三方库更受青睐。
原文由 Tom Hennen 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Python
--- 中使用 DLL
文件的最简单方法是什么?
具体来说,如何在 不 编写任何额外的包装器 C++
代码以将功能公开给 Python
的情况下做到这一点?
本机 Python
功能比使用第三方库更受青睐。
原文由 Tom Hennen 发布,翻译遵循 CC BY-SA 4.0 许可协议
此页面 有一个非常简单的从 DLL 文件调用函数的示例。
为了完整起见,在这里解释细节:
在 Python 中调用 DLL 函数非常容易。我有一个带有两个函数的自制 DLL 文件:
add
和sub
有两个参数。
add(a, b)
返回两个数字的加法
sub(a, b)
返回两个数的减法DLL 文件的名称将是“demo.dll”
程序:
from ctypes import* # give location of dll mydll = cdll.LoadLibrary("C:\\demo.dll") result1= mydll.add(10,1) result2= mydll.sub(10,1) print("Addition value:"+result1) print("Substraction:"+result2)
输出:
Addition value:11 Substraction:9
原文由 atul 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
为了易于使用, ctypes 是要走的路。
以下 ctypes 示例来自我编写的实际代码(在 Python 2.5 中)。到目前为止,这是我找到的最简单的方法,可以按照您的要求进行操作。
The
ctypes
stuff has all the C-type data types (int
,char
,short
,void*
,等等)并且可以通过值或引用传递。它也可以返回特定的数据类型,尽管我的示例没有这样做(HLL API 通过修改通过引用传递的变量来返回值)。就上面展示的具体示例而言,IBM 的 EHLLAPI 是一个相当一致的接口。
所有调用都传递四个 void 指针(EHLLAPI 通过第四个参数发送返回代码,一个指向
int
的指针,所以,当我指定int
作为返回类型时,我可以放心地忽略它)根据 IBM 在此处 的文档。换句话说,该函数的 C 变体将是:这使得单个简单的
ctypes
函数能够执行 EHLLAPI 库提供的任何操作,但其他库可能需要单独的ctypes
函数为每个库函数设置。WINFUNCTYPE
的返回值是一个函数原型,但您仍然需要设置更多参数信息(除了类型之外)。hllApiParams
中的每个元组都有一个参数“direction”(1 = 输入,2 = 输出等)、参数名称和默认值 - 详情请参阅ctypes
一旦你有了原型和参数信息,你就可以创建一个 Python “可调用”
hllApi
来调用函数。您只需创建所需的变量(p1
到p4
在我的例子中)并用它们调用函数。