python3使用ctypes在wind

本文将介绍如何在#%#$#%@%@%$#%$#%#%#$%@_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++部分代码

  1. 创建C/C++动态链接库:与创建Python扩展库不同,ctypes调用的C++库与Python没有代码关联,只是提供了开放的公共标准。

  2. 在Visual Studio中创建Win32项目:选择DLL库的空项目,或者选择导出符号选项,它会帮你设置好动态库的相关宏。

  1. 创建testctypes.cpp代码

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

  1. 将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++函数可能存在重载,函数名不确定。

运行测试结果:

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

相关课程链接