Python 调用 DLL
一、C++ 编写 DLL
1、.hpp 头文件
// dll_test.hpp
#ifdef DLL_TEST
#define MY_API _declspec(ddllexport) // 当头文件作为DLL工程编译时(会用到DLL工程中的 .cpp 文件),设为导出。
#ELSE
#define MY_API _declspec(dllimport) // 当DLL被其它工程调用时(不会用到DLL工程中的 .cpp 文件),设为导入。
#endif
//需要被外界调用的类(父类)
class MY_API my_class
{
public:
// 类成员变量
int x;
// 类方法
void func(int x);
};
// 函数,真正的函数名由编译器决定
int MY_API add(int x, int y);
// 函数,函数名不会被改变
extern "C" MY_API int add(int x, int y);
2、.cpp 文件
// dll_test.cpp
#define DLL_TEST // 定义宏,使编译DLL工程时为导出 (结合头文件看)
#include <iostream>
#include "dll_test.hpp"
using namespace std;
// 类方法实现
void MY_API my_class::func(int x)
{
cout << x << endl;
}
// 函数实现
int MY_API add(int x, int y)
{
return x+y;
}
二、Python 调用 DLL
1、ctypes 库
- ctypes 库用来调用 windows 的 dll / linux 的 so
- python 自带 ctypes 库,不需额外安装
2、调用 DLL
- 第一步:用 c/c++,创建一个 dll
- 第二步:把生成的 .dll 文件拷贝到 .py 文件的同级目录
- 第三步:使用 ctypes 库调用 dll
# 导入 ctypes 库
from ctypes import *
# 加载 dll 文件为一个对象
dll = CDLL("dll_test.dll")
# 调用 dll 中的函数,dll 要有add()函数
res = dll.add(1, 2)
GOOD LUCK!