Python3调用C程序(超详解)
Python为什么要调用C?
1.要提高代码的运算速度,C比Python快50倍以上
2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样的底层资源进行访问
Python调用C的方法:
Python调用C的方法通常有3种:
1.SWIG,编写一个额外的接口文件来作为SWIG(终端工具)的入口
2.通过CTypes调用
3.使用Python/C API方法
第一种方法大多数情况下会带来不必要的麻烦,我并没有试验,本文只针对2,3方法作详细说明
通过CTypes调用:
Python中的ctypes模块可能是Python调用C方法中最简单的一种。ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改。也正是如此奠定了这种方法的简单性。
下面是python文件的代码:
from ctypes import * #pip ctypes库,并导入库
test = CDLL("./test.dll") #调用当前目录下叫test的dll文件,dll文件是C生成的动态链接库
result =test.sum(5,10) #调用库里的函数sum,求和函数
print(result) #打印结果
接下来用C语言编写dll动态链接库,这里使用VS:
单击头文件,新建项:
添加源文件:
在头文件test.h中加入如下代码:
#pragma once
#ifdef BUILD_TEST
#define API_SYMBOL __declspec(dllexport)
#else
#define API_SYMBOL __declspec(dllimport)
#endif
//宏定义,导出或者导入//
extern "C" API_SYMBOL int sum(int x, int y)