在Python中可以通过ctypes来调用动态库中的C接口,具体操作过程如下:
1. 使用vs2013创建一个加、减、乘、除的动态库,并对外提供C接口,code内容如下:
math_operations.hpp:
#ifndef TEST_DLL_1_MATH_OPERATIONS_HPP_ #define TEST_DLL_1_MATH_OPERATIONS_HPP_ #define FBC_EXPORTS __declspec(dllexport) #ifdef __cplusplus extern "C" { #endif FBC_EXPORTS int add_(int a, int b); FBC_EXPORTS int sub_(int a, int b); FBC_EXPORTS int mul_(int a, int b); FBC_EXPORTS int div_(int a, int b); #ifdef __cplusplus } #endif #endif // TEST_DLL_1_MATH_OPERATIONS_HPP_
math_operations.cpp:
#include "math_operations.hpp" #include <iostream> FBC_EXPORTS int add_(int a, int b) { fprintf(stdout, "add operation\n"); return a + b; } FBC_EXPORTS int sub_(int a, int b) { fprintf(stdout, "sub operation\n"); return a - b; } FBC_EXPORTS int mul_(int a, int b) { fprintf(stdout, "mul operation\n"); return a * b; } FBC_EXPORTS int div_(int a, int b) { if (b == 0) { fprintf(stderr, "b can't equal 0\n"); return -1; } return (a / b); }
2. python代码如下:
import ctypes lib = ctypes.cdll.LoadLibrary("E:/GitCode/Python_Test/lib/rel/x64_vc12/Test_DLL_1.dll") a = 9; b = 3 value = lib.add_(a, b) print("add result:", value) value = lib.sub_(a, b) print("sub result:", value) print("mul result:", lib.mul_(a, b)) print("div result:", lib.div_(a, b))
执行结果如下: