• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
Python调用C++dll (window平台)

 

 

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

  

 

posted on 2020-11-04 16:06  MKT-porter  阅读(713)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3