第一个DLL程序
介绍
在 Windows 下,DLL(Dynamic Link Library,动态链接库)是一个被编译过的二进制程序,但与 .exe 文件不同,.dll 文件不能独立运行,必须由其他程序调用。
为什么有这东西呢?当然有其存在的好处啦:
不限语言
我们可以用自己熟悉的语言写 DLL,然后由其他语言写的可执行程序来调用这些 DLL。例如,可以用 Python 写程序的业务逻辑,然后调用 C 写的实现一个具体功能的 DLL 模块。
增强功能
我们看到许多产品都提供了界面插件功能,允许用户动态地更换程序的界面,这就可以通过更换界面 DLL 来实现。
简化管理
在一个大型项目开发中,通常都是由多个项目小组同时开发。我们可以将项目细分,将不同功能交由各项目小组以多个 DLL 的方式实现,这样,各个项目小组就可以同时进行开发了。
节省空间
如果多个应用程序需要同样的功能,那么可以将该功能以 DLL 的形式提供,这样在机器上只需要存在一份该 DLL 文件就可以了。另外,如果多个应用程序使用同一个 DLL,该 DLL 只需要放入内存一次,所有的应用程序就都可以共享它了。
至于坏处嘛,就是写起来稍微麻烦一点。
在 Linux 环境下没有 .dll 文件,但也有类似的,对应的文件后缀名一般是 .so(Share Object),可以看作同一个东西的不同称呼。
HelloWorld
代码:1
2
3
4
5// demo.c
const char *hello(void)
{
return "Hello World from Dynamic Link Library!";
}1
2
3
4
5
6
7
8# main.py
import ctypes
dll = ctypes.CDLL('./demo.dll')
hello = dll.hello
hello.restype = ctypes.c_char_p
print(hello())
命令:1
2gcc -shared -o demo.dll demo.c
./main.py
结果:1
b'Hello World from Dynamic Link Library!'