news 2026/2/1 0:30:54

python如何调用dll文件中的函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python如何调用dll文件中的函数

C或C++编写的程序效率非常高,有些复杂的计算python不如C或C++程序,所以有时使用python调用C或C++编写编译为 DLL 的文件来处理问题,那 python 如何调用dll文件中的函数呢?

一,生成 DLL 文件,

假设C或C++编写文件名为userDevDll01.cpp的内容如下,文件编译输出dll文件的userDevDll01.dll的内容

// 文件编译输出dll文件的userDevDll01.dll的内容,可定义更多复杂业务逻辑 #include <stdio.h> __declspec(dllexport) int fun01(int a, int b) { return a * b; }

编译生成的DLL 文件存放:F:\userDllFiles\userDevDll01.dll

二,在 python 中调用 DLL 文件

1,使用 python 的 ctypes 模块操作DLL

2,加载 DLL 文件,

3,定义 DLL 的入参的数据类型和返回值的数据类型,

4,python 调用的 DLL 中的方法

参考如下例子:

# -*- coding: UTF-8 -*- # ======================================== # @ProjectName: pythonws001 # @Filename: call_dll.py # @Copyright www.637hulian.com # @Author: shenzhennba(Administrator) # @Version 1.0 # @Since 2025/12/13 15:52 # ======================================== # python调用dll文件 # ======================================== # 1.导入ctypes模块 import ctypes import logging import os import com.pro001.log.pro_log_config as pro_log_config # 调用配置函数,通常在模块加载时调用 pro_log_config.setup_logging() # 获取日志对象和是指各种输出处理器, # 每个模块将有自己的日志记录器,并且可以通过模块名来区分日志消息的来源。 logger = logging.getLogger(__name__) def call_dll_fun01(dll_full_path): """ 调用指定路径的dll中的函数 """ if not os.path.exists(dll_full_path): logging.info(f'dll文件不存在: {dll_full_path}') return None try: # 2.加载dll文件 lib01 = ctypes.WinDLL(dll_full_path) #lib01 = ctypes.cdll.LoadLibrary(dll_full_path) # 3,指定dll中的函数fun01返回值类型和参数类型 lib01.fun01.restype = ctypes.c_int lib01.fun01.argtypes = [ctypes.c_int, ctypes.c_int] # 4.调用dll中的函数 ret = lib01.fun01(10, 20) logging.info(f'调用dll函数fun01返回值:{ret}') return ret except Exception as e: logging.error(f'调用dll函数fun01异常:info:\n{e}') return None def main(): """ 主函数 """ # 假设C或C++编写的dll文件位于如下路径 dll_full_path = r'F:\userDllFiles\userDevDll01.dll' v = call_dll_fun01(dll_full_path) print(f'call dll fun01: {v}') if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 14:35:20

GP2040-CE终极指南:从零打造个性化游戏控制器的完整流程

想要打造专属的游戏控制器却不知从何下手&#xff1f;GP2040-CE开源固件项目让这一切变得简单。这个专为Pico-PIO-USB板设计的解决方案&#xff0c;为你打开了自定义游戏控制器的大门&#xff0c;无论你是格斗游戏爱好者还是平台跳跃高手&#xff0c;都能找到最适合自己的配置方…

作者头像 李华
网站建设 2026/1/31 15:00:06

入门】使用Node.js开发一个MCP服务器(STDIO方式)介绍

CP&#xff08;Model Control Protocol&#xff09;是一个标准化接口协议&#xff0c;用于定义AI工具的功能和参数格式。它允许AI以标准方式调用各种工具&#xff0c;例如通过定义参数格式&#xff08;如城市名称&#xff09;来获取城市天气信息。当用户请求查询北京天气时&…

作者头像 李华
网站建设 2026/1/29 13:24:58

实现一个深拷贝函数

基础问答问&#xff1a;知道浅拷贝和深拷贝吗&#xff1f;为什么要用深拷贝&#xff1f;答&#xff1a;拷贝&#xff0c;可以认为是赋值&#xff0c;对于 JavaScript 中的基础类型&#xff0c;如 string, number, null, boolean, undefined, symbol 等&#xff0c;在赋值给一个…

作者头像 李华
网站建设 2026/1/29 13:47:03

AI视频生成技术原理与行业应用 - AI视频技术原理与架构

AI视频技术原理与架构一、AI视频生成的核心逻辑与完整流程1. 核心定义&#xff1a;什么是AI视频生成模型&#xff1f;2. 完整流程&#xff1a;从数据到视频的四步走二、技术范式演进&#xff1a;从早期探索到主流架构1. 四大基础技术范式对比2. 范式演进时间线3. 主流架构&…

作者头像 李华
网站建设 2026/1/29 13:51:20

全新首发:考虑多尺度序列间相关性的多元时间序列预测。 结合了频域分析和自适应图卷积算法,效果显...

全新首发&#xff1a;考虑多尺度序列间相关性的多元时间序列预测。 结合了频域分析和自适应图卷积算法&#xff0c;效果显著 特点如下&#xff1a; 1.这是一种先进的深度学习模型&#xff0c;旨在利用频域分析和自适应图卷积捕捉多个时间尺度上不同的序列间相关性。 通过利用频…

作者头像 李华