news 2026/5/11 20:04:40

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/5/9 15:37:26

Open GApps构建系统深度优化:从缓存管理到性能飞跃

Open GApps构建系统深度优化&#xff1a;从缓存管理到性能飞跃 【免费下载链接】opengapps The main repository of the Open GApps Project 项目地址: https://gitcode.com/gh_mirrors/op/opengapps 想要让Open GApps构建过程如丝般顺滑&#xff1f;掌握构建系统的深度…

作者头像 李华
网站建设 2026/5/11 2:41:00

零成本AI革命:gpt4free-ts开源项目深度解析与实战指南

引言&#xff1a;AI应用的新时代机遇 【免费下载链接】gpt4free-ts Providing a free OpenAI GPT-4 API ! This is a replication project for the typescript version of xtekky/gpt4free 项目地址: https://gitcode.com/gh_mirrors/gp/gpt4free-ts 在当前AI技术飞速发…

作者头像 李华
网站建设 2026/5/10 23:13:51

Graphiti知识图谱实战指南:从零搭建AI记忆系统的完整方案

Graphiti知识图谱实战指南&#xff1a;从零搭建AI记忆系统的完整方案 【免费下载链接】graphiti 用于构建和查询时序感知知识图谱的框架&#xff0c;专为在动态环境中运行的 AI 代理量身定制。 项目地址: https://gitcode.com/GitHub_Trending/grap/graphiti 你是否曾为…

作者头像 李华
网站建设 2026/5/10 21:49:21

高频信号能定位转子?这事儿听着有点玄乎,但旋转高频注入法确实让永磁同步电机甩掉了位置传感器。今天咱们就拆解这个黑科技,手把手看看怎么用代码实现无位置控制

旋转高频注入法永磁同步电机无位置控制策略&#xff0c;转子位置效果很好。 旋转高频电压注入法是通过在电机绕组端上注入三相对称的高频电压信号作为激励&#xff0c;检测 该激励信号产生的电流响应&#xff0c;通过特定的信号处理&#xff0c;最终获得转子位置与转速信息&…

作者头像 李华
网站建设 2026/5/11 8:58:19

踩下电门瞬间,电动车总有个让人着迷的爆发力。这背后藏着复合电源系统的精妙配合,今天咱们拆开看看这个由电池组、超级电容和DCDC组成的能量组合怎么玩转瞬态功率

基于规则策略的纯电动汽车复合电源仿真模型&#xff0c;包括DCDC模型、电池模型&#xff0c;超级电容模型。先看动力电池的建模。这里用二阶RC等效电路能比较好地反映动态特性。试着用Python搭个简化模型&#xff1a; class BatteryModel:def __init__(self, soc0.8):self.soc …

作者头像 李华