Python中的ctypes模块可能是Python调用C方法中最简单的一种。ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改。也正是如此奠定了这种方法的简单性。
示例如下:实现两数求和的C代码,保存为add.c
#include "stdio.h"
__declspec(dllexport) int sum(int a, int b)
{
return a + b;
}
__declspec(dllexport) float add_float(float num1, float num2){
return num1 + num2;
}
接下来将C文件编译为.dll
文件。
假设我们在Windows上安装了Visual Studio 2017,其安装目录为:C:\Program Files\Microsoft Visual Studio 10.0
那么cl、link所在的目录为:C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
我们可以在Visual Studio Command Prompt (2017)中执行这样的命令来把源代码编译成动态链接库:
cl /c add.c
link /dll add.obj
有图有真相,我们截图如下:(如果要生成32位.dll文件,则选择x86)
现在用你的Python代码中来调用它
import ctypes
#load the shared object file
adder = ctypes.CDLL('add.dll')
#Find sum of integers
res_int = adder.sum(4,5)
print ("Sum of 4 and 5 = " + str(res_int))
#Find sum of floats
a = ctypes.c_float(5.5)
b = ctypes.c_float(4.1)
add_float = adder.add_float
add_float.restype = ctypes.c_float
print ("Sum of 5.5 and 4.1 = ", str(add_float(a, b)))
输出如下:
至此,大功告成!