Python语言的处理速度不太理想,所以一些对速度要求较高的模块我们会采用C语言或者C++语言编写,然后由Python语言调用。
本文章讲解Windows操作系统下Python调用C/C++编写的动态链接库文件(Windows操作系统的动态链接库文件的扩展名为dll,Linux操作系统的动态链接库文件的扩展名为so,本文章讲解的为Windows操作系统,所以本文中以后的动态链接库文件均指扩展名为dll文件的动态链接库文件)。
本文章的软件环境为:Dev-C++ 5.7.1 + Python3.7

下面开始正式讲解:

在Dev-C++ 中新建一个工程

点击File >>> New >>> 点击Project

出现一下界面

cpp调用python代码 python如何调用c+ +编写的代码_Python

选中DLL,填入合适的项目名称,点击“OK”

删除项目中的"dll.h" 和 "dllmain.cpp"文件

新建自己需要的文件并编写自己的C/C++代码。

此处本人举一个栗子:

新建“DllTest.h” 和 “DllTest.cpp” 文件(项目名称为DllTest)

组织结构如下:

cpp调用python代码 python如何调用c+ +编写的代码_动态链接_02


在"DllTest.h" 文件中写入一下代码:

cpp调用python代码 python如何调用c+ +编写的代码_动态链接_03


"DllTest.h"中的前5行代码利用C语言的宏定义将__declspec(dllexport) 替换为DLLIMPORT (在编译阶段遇到DLLIMPORT会替换为__declspec(dllexport) ,方便于程序的编写)

__declspec(dllexport)的作用为将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口

extern “C” 修饰的变量和函数是按照C语言方式编译和连接的;

第7行声明有一个名字叫做“hello”的DLL对外接口函数,这个函数是按照C原因方式编译和连接的,这个函数没有参数返回数据类型为“char*”。在"DllTest.cpp"文件中写入以下代码:

cpp调用python代码 python如何调用c+ +编写的代码_动态链接_04


"DllTest.cpp"文件中第一行代码为导入"DllTest.h"头文件。

第3至6行代码对"DllTest.h"头文件中的“hello”函数进行实现。

编写完成!
点击Dev-C++中的"Compile"按钮对dll项目进行编译。
编译完成后工程项目文件夹中会有一个文件名称与项目名称相同的dll文件,这个文件就是我们需要的动态链接库文件。

编写Python代码如下:

cpp调用python代码 python如何调用c+ +编写的代码_库文件_05

本栗子将dll文件与Python文件放至同一个文件夹中。

Python代码中第6行为变量lib导入编写好的dll。

第7行为变量h赋值dll文件中的hello函数

第8行设置h函数的返回值为C语言中的字符串指针类型

第9行打印这个函数的返回值。

注:本栗子中hello方法为无参函数,所以未传参数,若为有参函数则必须传递参数。运行Python代码:

cpp调用python代码 python如何调用c+ +编写的代码_cpp调用python代码_06


注:本操作系统中安装了Python2.7 和Python3.7 为Python3.7配置为Python3,读者需根据自己的配置运行Python命令。