如何从脚本语言调用DLL?
我有一个第三方产品,是一个终端模拟器,它提供了一个DLL文件,可以和C程序连接,基本上是用来自动化操作这个产品(比如发送按键、检测屏幕上的内容等等)。
我想用脚本语言来控制它(我对Python比较熟悉,对Perl稍微了解一点),这样我们就不需要每次发现问题时都编译并发送可执行文件给客户了。
我们还希望客户能够使用我们的脚本作为基础,自己编写脚本,而他们并不想写和编译C代码。
有什么好的方法可以让Python或Perl和Windows的DLL进行连接呢?我最初的想法是写一个服务器程序,让Python脚本通过TCP和它通信,但我觉得应该有更简单的解决方案。
5 个回答
5
在Perl语言中,P5NCI也能做到这一点,至少在某些情况下是这样。不过我觉得,任何直接处理dll(动态链接库)接口的工具都不太友好。如果你想要一个对用户(比如写脚本的人)友好的包装,那不如直接用XS模块。
我觉得“编译并发送可执行文件”和“编译并发送脚本”之间没有什么实质性的区别。
12
在Perl编程中,Win32::API 是一个很简单的方法,可以用来和DLL(动态链接库)进行交互。如果你有编译器和Windows的头文件,还可以使用Inline::C。
另外,Perl的XSUB也可以用来在Perl和C语言之间建立连接。
15
从Python调用C语言库的一种方法是使用ctypes库:
>>> from ctypes import *
>>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0);