Python 如何从脚本语言调用DLL?
我有一个第三方产品,终端仿真器,它提供了一个DLL,可以链接到一个C程序,基本上自动驱动这个产品(发送击键,检测屏幕上的内容等等) 我想用脚本语言来驱动它(我对Python比较熟悉,而对Perl则不太熟悉),这样我们就不必在发现问题时编译并向客户发送可执行文件 我们还希望客户能够使用我们的脚本作为基线来编写自己的脚本,而不会考虑编写和编译C代码Python 如何从脚本语言调用DLL?,python,perl,dll,Python,Perl,Dll,我有一个第三方产品,终端仿真器,它提供了一个DLL,可以链接到一个C程序,基本上自动驱动这个产品(发送击键,检测屏幕上的内容等等) 我想用脚本语言来驱动它(我对Python比较熟悉,而对Perl则不太熟悉),这样我们就不必在发现问题时编译并向客户发送可执行文件 我们还希望客户能够使用我们的脚本作为基线来编写自己的脚本,而不会考虑编写和编译C代码 让Python/Perl与Windows DLL接口的好方法是什么。我的第一个想法是编写一个服务器程序,让Python脚本通过TCP与之通信,但必须有一
让Python/Perl与Windows DLL接口的好方法是什么。我的第一个想法是编写一个服务器程序,让Python脚本通过TCP与之通信,但必须有一个更简单的解决方案。从Python调用C库的一种方法是使用: 在Perl中,这是与DLL进行某种接口的简单方法。如果您有权访问编译器和windows标题,则还存在 Perl s还可以在Perl和C之间创建接口。在Perl中,至少在某些情况下,也可以这样做。但在我看来,您使用的任何直接管理与dll接口的东西都将对用户不友好,如果您将拥有一个用户(脚本编写者?)友好的包装器,那么它也可能是一个XS模块
我想我看不出“编译并发送可执行文件”和“编译并发送脚本”之间有什么有意义的区别。对于Python,可以编译一个链接到DLL的扩展,这样在Python中就可以像导入普通模块一样导入它。您可以手动完成此操作,可以使用Boost.Python之类的库,也可以使用SWIG之类的工具(它还支持Perl和其他脚本语言)自动生成包装器。PythonPy_InitModuleAPI函数允许您从c/c++函数创建一个模块,然后可以从Python调用该模块 大约需要十几行c/c++代码才能实现,但编写代码非常简单:
我编写的编辑器使用这种方法允许用Python编写宏,效果非常好。添加XS,我们就有了赢家。如果您在回答中写了一个“hello world”示例,而不是指向不实用页面的链接,你不会是这个答案列表的最新成员:-)我提供的链接已经包含了一个简单的“hello world”示例。在提供的链接中:“可以在Python源代码发行版的Demo/embed/Demo.c文件中找到一个示例。”
>>> from ctypes import *
>>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0);