Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从脚本语言调用DLL?_Python_Perl_Dll - Fatal编程技术网

Python 如何从脚本语言调用DLL?

Python 如何从脚本语言调用DLL?,python,perl,dll,Python,Perl,Dll,我有一个第三方产品,终端仿真器,它提供了一个DLL,可以链接到一个C程序,基本上自动驱动这个产品(发送击键,检测屏幕上的内容等等) 我想用脚本语言来驱动它(我对Python比较熟悉,而对Perl则不太熟悉),这样我们就不必在发现问题时编译并向客户发送可执行文件 我们还希望客户能够使用我们的脚本作为基线来编写自己的脚本,而不会考虑编写和编译C代码 让Python/Perl与Windows DLL接口的好方法是什么。我的第一个想法是编写一个服务器程序,让Python脚本通过TCP与之通信,但必须有一

我有一个第三方产品,终端仿真器,它提供了一个DLL,可以链接到一个C程序,基本上自动驱动这个产品(发送击键,检测屏幕上的内容等等)

我想用脚本语言来驱动它(我对Python比较熟悉,而对Perl则不太熟悉),这样我们就不必在发现问题时编译并向客户发送可执行文件

我们还希望客户能够使用我们的脚本作为基线来编写自己的脚本,而不会考虑编写和编译C代码


让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);