本文将介绍如何在#%#$#%@%@%$#%$#%#%#$%@_0f4137ed1502b5045d6083aa258b5c++42系统中使用python3的ctypes库访问c和c++动态链接库函数。我们将通过一个简单的示例来说明这一过程,不涉及参数传递和返回值,也不访问其他动态链接库。
一、测试环境介绍和准备
测试环境:
- 操作系统:Windows 10
- Python版本:3.7.0
- VS版本:Visual Studio 2015 社区版(免费)
相关工具下载:
- Visual Studio 2015 社区版(免费)
- Python 3.7.0(源码和安装文件)下载链接
二、C/C++部分代码
创建C/C++动态链接库:与创建Python扩展库不同,ctypes调用的C++库与Python没有代码关联,只是提供了开放的公共标准。
-
在Visual Studio中创建Win32项目:选择DLL库的空项目,或者选择导出符号选项,它会帮你设置好动态库的相关宏。
立即学习“Python免费学习笔记(深入)”;

- 创建testctypes.cpp代码:

其中,extern "C"表示将此函数编译为C语言函数。如果源码是.c文件(即使用C语言编译),则不需要添加extern "C"。__declspec(dllexport)是Windows特有的导出库函数,如果没有这个标记,库函数将无法被访问。如果需要跨平台到Linux,可以通过宏语法将其移除。
- 将DLL文件导出设置到当前项目路径,并完成编译:

我们编译出Win32的Debug库,注意位数不能错。如果Python是64位的,也需要编译64位的库。

三、Python部分的代码
from ctypes import *
lib = CDLL("testctypes") # 可以添加路径
lib.CFunction()
-
from ctypes import *:导入ctypes库的所有类和函数。 -
CDLL("testctypes"):加载具体的动态链接库文件,可以添加路径,例如dll/testctypes。在Windows中,可以省略动态库的后缀名.dll,Python会自动查找testctypes.dll文件。DLL文件可以放在Python执行的路径下,也可以放到系统路径或PATH环境变量设置的路径。 -
lib.CFunction():加载动态链接库中的CFunction函数。注意,尽管我们使用C++来创建扩展库,Python本身也支持C++的代码,但ctypes只能访问C语言函数,因为C++函数可能存在重载,函数名不确定。
运行测试结果:

测试成功。第一步我们已经完成,下一篇文章将开始添加参数和返回值。











