百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

详解Python调用dll功能实现

off999 2024-12-09 16:18 29 浏览 0 评论

Python 项目中有时会兼顾执行效率和功能隐藏的需求,调用dll是个很好的选择。本文介绍一下Python调用dll的方法,供大家参考。

开发工具:Visual Studio 2017,Pycharm

开发框架:C++ dll开发用MFC;Pycharm python项目

本文主要内容:

  • C++编写dll的主要功能实现;
  • python 调用dll的实现方法;
  • Python调用dll方法的总结。

1.C++编写dll接口

step1 创建MFC 动态链接库 应用程序

step2 查看工程结构并编译生成dll 文件

step3 添加接口函数并编译生成dll

添加接口函数,在CPP 文件中添加接口,形式如下,extern "C" __declspec(dllexport) +返回类型 +接口函数名称+(参数1,参数2 ...)

//带参数和返回值的接口
extern"C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
//带参数的接口
extern"C" __declspec(dllexport) void ShowTips(char* tips)
{
AfxMessageBox(tips);
}
//对话框接口函数调用
extern"C" __declspec(dllexport) void TestDialog(char* tips)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDialogA* dlg = new CDialogA(NULL, tips);
dlg->DoModal();
}

更多C++创建dll的方法可参考前面总结的C# 调用dll接口功能实现

2.python 调用dll

2.1加载DLL

dllPath = "./DllTest.dll"
pDll=ctypes.WinDLL(dllPath)
print (pDll)

2.2 调用带参数和返回值的接口

2.3 调用带字符串参数的接口

#C++ 接口 原型:extern"C" __declspec(dllexport) void ShowTips(char* tips)
shpwtips = pDll.ShowTips
#设置输入参数类型
shpwtips.argtypes = [ctypes.POINTER(ctypes.c_char)]
#传参 字符串需要转换
STR1 = (ctypes.c_char * 256)(*bytes("hello python call dll!", 'MBCS'))
#调用函数
shpwtips(STR1)

2.4 调用对话框接口并传参

#3 调用对话框接口
#extern"C" __declspec(dllexport) void TestDialog(char* tips)
shpwdialog = pDll.TestDialog
#设置输入参数类型
shpwdialog.argtypes = [ctypes.POINTER(ctypes.c_char)]
#传参
STR1 = (ctypes.c_char * 256)(*bytes("hello python call dll dialog!", 'MBCS'))
#调用函数
shpwdialog(STR1)

3.总结

本文总结了Python调用dll的最基本的实现方法,仅供参考。总结一下本文的要点:

1)实现Python 调用带参数和返回值的接口

2)实现Python调用带参数不带返回值的接口

3)实现Python调用带参数的 对话框接口

4)功能实现需要在类接口中完成,python只负责调用,不负责实现;

5)接口函数如果带参数,需要设置argtypes 类型,参数个数和类型与实际值保持一致(shpwtips.argtypes = [ctypes.POINTER(ctypes.c_char)]]);

6)调用接口之前,字符串参数本身也需要进行转换(STR1 = (ctypes.c_char * 256)(*bytes("hello python call dll dialog!", 'MBCS'))))

7)编码方式,如果C++ dll 是多字节 编码的,用'MBCS' ;如果是unicode 编码的,用'utf-8'

更多扩展内容待总结。

相关推荐

pubg加速器免费版(pubg加速器免费版无广告)

现在加速吃鸡的游戏加速器是有专线路线的比较好,专线的稳定很多,不过目前是没有完全免费的加速软件,很多都可以先体验,注册就可以体验的,可以多去体验几款,对比一下。目前的加速器可以分为三个等级第一等级:全...

如何用u盘重装电脑系统win7(用u盘怎样重装系统win7)
如何用u盘重装电脑系统win7(用u盘怎样重装系统win7)

u盘怎么装win7系统步骤如下:1、先下载Windows7镜像,根据自己需求选择下载的版本:简化版、家庭基础版、家庭高级版、企业版等。2、下载工具软碟通。直接在搜索引擎中输入“软碟通”,选择合适的下载地址,直接下载安装即可。3、制作系统U...

2025-12-27 08:51 off999

系统驱动怎么安装(系统驱动的安装)

首先进入系统的设备管理器,检查一下是否存在有没有正确安装或者找不到的驱动程序的设备,然后进入硬件生产厂商官网去下载对应的操作系统的驱动程序,进行安装。如果嫌麻烦,可下载第三方软件进行辅助安装。1、如果...

设置bios密码(银河麒麟怎么设置bios密码)
设置bios密码(银河麒麟怎么设置bios密码)

想电脑BIOS开机密码,其实很简单,只要进入BIOS设置界面,然后选择“security”选项卡,在“security”内设置好开机密码即可。下面就跟随小编一起来学习一下具体提设置步骤吧!1、首先开机,然后快速按“F2”或者“F12”进入B...

2025-12-27 07:51 off999

华硕售后服务中心查询(华硕售后维修服务网点查询)

首先查看包装盒、保修卡、机器底部。三个地方的SN码及机器的序列号是不是一致。如果不一致那一定是有问题的。2然后,如果一致,我们可以拨打华硕的客服,通过机器的序列号,查询机器的基本情况,然后与说明书上的...

如何更改硬盘分区(硬盘怎么更改分区)

要修改磁盘分区,首先需要使用磁盘管理工具,如DiskManagement(Windows)或DiskUtility(Mac)。在工具中,选择要修改的磁盘并右键点击,然后选择“修改分区”选项。接着,...

无线路由器当交换机使用(路由器当交换机用无线wifi还可以上网吗)

若您想将无线路由器用作交换机,您可以按照以下步骤操作:1.确保您的无线路由器具有交换器功能。不是所有的无线路由器都具备此功能,请先确保您的设备支持。2.将您的无线路由器与网络中的其他设备连接。通常...

computer(computer lab)

"电脑"这个名称实际上是人们对具有计算功能电子设备的俗称。而计算机(Computer)则是这个设备的正式名称,因为"计算"是其核心功能。在英文中,Computer是指可...

电脑怎么连打印机(如何在电脑上安装打印机)
  • 电脑怎么连打印机(如何在电脑上安装打印机)
  • 电脑怎么连打印机(如何在电脑上安装打印机)
  • 电脑怎么连打印机(如何在电脑上安装打印机)
  • 电脑怎么连打印机(如何在电脑上安装打印机)
电脑重置20多个小时了(重置电脑一直12%)

重置电脑时间太长了解决办法如下1、将电脑关机然后开机或者直接点击重启,然后按住DELETE键,电脑会自动进入到BIOS;2、电脑屏幕上会显示两个选项,两个选项一般都在电脑屏幕的右方;3、其中一个选项是...

电脑虚拟机是什么(电脑虚拟机有啥用)

电脑虚拟机(VirtualMachine,VM),也称为虚拟计算机,是一种软件模拟的计算机,它在现有的计算机硬件上创建一个虚拟的计算机环境。这个虚拟环境可以用来运行操作系统、应用程序等软件,就像是在...

键盘图片大图(键盘图片大图清晰)

这个是仿苹果机上的无线键盘(妙控一代)的,属于山寨产品。1、在手机的微信或者短信或者其他可以打开键盘的应用中打开键盘,点击键盘左上角的输入法设置图标,页面显示输入法的各种设置功能;2、在输入法的设置...

win11系统可以更新吗(w11系统可以用了吗)

可以1.点击“开始”,打开“设置”。2.找到“更新和安全”,选择“预览体验计划”。3.点击“开始”,需要登录微软账户。4.登录完成后弹出一个升级的渠道,选择dev进行下载win11即可。方法二:首...

winxp安装系统镜像iso下载(xp的镜像系统怎么安装)

要安装一个ISO镜像文件,首先需要将ISO文件挂载到计算机上。在Windows系统中,可以右键点击ISO文件,并选择“挂载”选项,然后打开文件资源管理器就能看到ISO文件被挂载的虚拟驱动器。在Linu...

网易邮箱帐号注册(网易邮箱帐号注册网易游戏)
  • 网易邮箱帐号注册(网易邮箱帐号注册网易游戏)
  • 网易邮箱帐号注册(网易邮箱帐号注册网易游戏)
  • 网易邮箱帐号注册(网易邮箱帐号注册网易游戏)
  • 网易邮箱帐号注册(网易邮箱帐号注册网易游戏)

取消回复欢迎 发表评论: