1 创建C++工程生成dll库
编译生成
2pythoN调用dll库
#!/bin/env python
# -*- coding: utf-8 -*-
import ctypes
#获取路径
import os
#pathnow=os.getcwd() #获取当前路径
pathnow=os.path.abspath('ConsoleApplication1.dll') #获取指定文件名字的全路径
pathnow=pathnow.replace('\\','/') #路径替换
#print(pathnow)
#调用库
#lib_add= ctypes.cdll.LoadLibrary(pathnow)
lib_add= ctypes.cdll.LoadLibrary('./ConsoleApplication1.dll')
print (lib_add.add(1,3))
命令行进入工程目录,运行
python .\python.py
例程2 封装成类调用+参数修改
C++打包库
#include
using namespace std;
//-------------------C++函数定义---------------------
class TestLib {
private:
int number = 0;
public:
void set_number(int num) {
number = num;
}
int get_number() {
return number;
}
};
//-------------------C++函数打包成C接口---------------------
extern "C" {
TestLib obj;
extern "C" _declspec(dllexport) int get_number() {
return obj.get_number();
}
extern "C" _declspec(dllexport) void set_number(int num) {
obj.set_number(num);
}
}
python调用库
#!/bin/env python
# -*- coding: utf-8 -*-
import ctypes
#获取当前路径
import os
#pathnow=os.getcwd() #获取当前路径
pathnow=os.path.abspath('ConsoleApplication1.dll') #获取指定文件名字的全路径
pathnow=pathnow.replace('\\','/') #路径替换
#print(pathnow)
#调用库
#linux下调用so
#lib = ctypes.cdll.LoadLibrary("./libpycallclass.so")
#win10下调用dll
lib= ctypes.cdll.LoadLibrary('./ConsoleApplication1.dll')
print(lib.get_number()) #0
lib.set_number(10)
print(lib.get_number()) #10