当前位置: 首页 > web >正文

Python调用C++动态库

1.要用到的C++动态库工程
在这里插入图片描述
ArrayTool.h

#ifndef ARRAY_TOOL_H
#define ARRAY_TOOL_H#ifdef MYLIBRARY_EXPORTS
#define MYLIBRARY_API __declspec(dllexport)  // 导出符号
#else
#define MYLIBRARY_API __declspec(dllimport)  // 导入符号
#endif// 声明一个导出函数
extern "C" MYLIBRARY_API int MaxNum(int first_num, int second_num);#endif // !ARRAY_TOOL_H

ArrayTool.cpp

#define MYLIBRARY_EXPORTS // 为了让导出符号有效,所以才需要定义这个宏
#include "ArrayTool.h"// 返回 first_num 和 second_num 中的最大值
int MaxNum(int first_num, int second_num)
{return first_num > second_num ? first_num : second_num;
}

2.python工程目录
在这里插入图片描述
2.将所要用到的C++动态库放在python项目目录下,如下图:
在这里插入图片描述
PyCharm会自动加载C++动态库:
在这里插入图片描述
3.编写python代码:main.cpp

import ctypes, ctypes.util  # ctypes 是 Python 的内置库,主要用于在 Python 中调用动态链接库# 查找动态库
def find_dll(dll_name):return ctypes.util.find_library(dll_name)  # 查找DLL# 加载动态库
def load_dll(dll_path):try:vc_dll = ctypes.CDLL(dll_path)  # 加载动态库,若失败抛出异常vc_func = vc_dll.MaxNum  # 取动态库的函数max_num = vc_func(0,3)  # 调用动态库函数print("max_num:"+str(max_num))except OSError as e:print(e, "加载DLL失败")# 主函数入口
if __name__ == "__main__":dll_path = find_dll("DLLDemo.dll")if dll_path:load_dll(dll_path)else:print("动态库路径不对")

4.执行python程序时会报错:[WinError 193] %1 不是有效的 Win32 应用程序。
原因如下图所示,因为此时我们用的动态库是32位的,但是python是64位的:
在这里插入图片描述
解决方法如下图所示,将动态库改成64位即可:
在这里插入图片描述

http://www.xdnf.cn/news/16910.html

相关文章:

  • k8s云原生rook-ceph pvc快照与恢复(下)
  • 【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?
  • iPhone 恢复出厂设置是否会删除所有内容?
  • 流式输出阻塞原因及解决办法
  • Pydantic模块学习
  • vivado扫盲:dcp(腾讯元宝)
  • QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。
  • 从零到一:Linux内核MMU启动与虚拟内存体系建立全流程详解
  • gitlab+jenkins的ci/cd部署
  • win11 命令禁用客户体验改善计划
  • 区块链概述
  • 云计算k8s集群部署配置问题总结
  • ARM Cortex-M 处理器的应用
  • Hive SQL (HQL) 编辑指南
  • vscode cursor配置php的debug,docker里面debug
  • 20250801在Ubuntu24.04.2LTS下编译firefly_itx_3588j的Android12时解决boot.img过大的问题
  • django的数据库原生操作sql
  • PHP在现代Web开发中的应用与优势分析
  • ACS-电机控制Buffer-任意路径规划(PVSPLINE绘制圆形)
  • OCC任务新SOTA!华科提出SDGOCC:语义深度双引导的3D占用预测框架(CVPR 2025)
  • Shader开发(六)什么是着色器
  • SQL数据库连接Python实战:疫情数据指挥中心搭建指南
  • STM32 使用 RTC 实现实时时钟功能
  • 【BFS】P7555 [USACO21OPEN] Maze Tac Toe S|普及+
  • Java Map和Set
  • Redis 初识Redis
  • 校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
  • 逻辑回归在银行贷款审批中的应用:参数选择与实践
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:柔性驱动革命之液压人工肌肉
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典