首页 » SEO优化 » phpcdll挪用技巧_Python实战014解决DLL动态链接库调用时碰着的问题

phpcdll挪用技巧_Python实战014解决DLL动态链接库调用时碰着的问题

访客 2024-11-11 0

扫一扫用手机浏览

文章目录 [+]

ctypes库

Python调用DLL须要依赖一个外部函数库ctypes,虽然是外部函数库但却已在Python内置了以是不须要单独安装。
它供应了与 C 兼容的数据类型并许可调用 DLL 或共享库中的函数,通过ctypes可以很方便地调用DLL中输出的接口函数。

DLL调用办法

为什么ctypes供应了这么多种dll调用办法,由于dll在导出函数时可以声明调用约定(stdcall或者cdecl),不同的约定办法导出的函数名也是不同的以是Python加载时也供应了相应的加载函数。
如果约定stdcall调用一样平常采取windll.LoadLibrary或者WinDLL办法调用,如果约定cdecl调用一样平常采取cdll.LoadLibrary或者CDLL调用(windll和cdll分别是WinDLL类和CDll类的工具)。

phpcdll挪用技巧_Python实战014解决DLL动态链接库调用时碰着的问题

from ctypes import # import ctypes# ---------- ctypes调用dll的几种办法 -----------# dll = windll.LoadLibrary(r"./ncdevs.dll")# dll = cdll.LoadLibrary("./ncdevs.dll")# dll = WinDLL("./ncdevs.dll")# dll = CDLL('./ncdevs.dll')OSError: [WinError 126] 找不到指定的模块

在python调用dll的时候碰着缺点:OSError: [WinError 126] 找不到指定的模块,这个问题大多数都是短缺了dll或者没有精确地引入dll。
特殊是当引入的dll还依赖于其它的dll时,依赖的dll也要能被Python访问到。

phpcdll挪用技巧_Python实战014解决DLL动态链接库调用时碰着的问题
(图片来自网络侵删)

# 调用同目录下的模块,如:father/myself/test.pyimport test 或 from test import # 调用同级目录下的模块,如:father/brother/test.pyimport brother.test 或 from brother.test import # 调用子目录下的模块,子目录必须要有 __init__.py文件。
如:django/myself/child/test.pyimport myself.child.test 或 from myself.child.test import # 调用上级目录下的模块,如:father/myself/test.pyimport father.demo 或者 from father.demo import
OSError: [WinError 193] %1 不是有效的 Win32 运用程序

这个问题该当是由于程序当前的编辑运行环境不匹配, 由于64位的python.exe只能调用64位的DLL,32位的python.exe 只能调用32位的DLL。
如果你用64位环境下的python调用32位的DLL文件肯定是弗成的,要担保环境同等(这里我的python是64位的,可是我编译的dll默认是32位的)。
本来还想着把dll编译成64位的呢,结果华中供应的dll也是是32位的编译直接报错:warning LNK4272: 库打算机类型“x86”与目标打算机类型“x64”冲突(只能安装个32位的Python先了)。

总结:

华中数控供应了C/C++、C#两种二次开拓用到的API函数,Python没法直接调用这些API。
以是这我还须要用C/C++调用类库中的方法将函数重新封装下,然后再交给Python来处理。
以上内容是

标签:

相关文章

新沂建设,一座新兴城市的崛起与展望

新沂这座新兴城市逐渐崭露头角。作为江苏省徐州市下辖的一个县级市,新沂地处苏北平原,地理位置优越,交通便捷,经济实力不断增强。本文将...

SEO优化 2025-03-23 阅读0 评论0