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 <iostream> 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