不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

前沿拓展:

不是有效的win32应用程序

提示不是有效的32应用程序有两种原因

1、这个文件是不是32位的应用程序,如果是64位的软件是无法在32位系统运行的,这个就会提示该程序不是有效的32应用关联性被破坏了,可能是人为或者**篡改的。

解决方环既话织法:

1、原因1的下载对应的32位版本软件安装运行即可。

2、按WIN键+R键打开运行窗口,输入REGEDIT按回车键打开。


最近有个项目需要希望可以采集华中数控系统的智能主轴负载并在WEB前端以波动图来展示负载数据,这里我打算利用Vue+Echarts来构建WEB前端展示、Python+Django来搭建WEB后台服务、由于是实时刷新数据所以这里利用WebSocket来实现数据交互、最后就是实现华中数控的数据采集。华中提供了DLL可以用来调用,所以这里我们需要在python中来引入DLL文件。

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

ctypes库

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

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

DLL调用方式

为什么ctypes提供了这么多种dll调用方式,因为dll在导出函数时可以声明调用约定(stdcall或者cdecl),不同的约定方式导出的函数名也是不同的所以Python加载时也提供了相应的加载函数。如果约定stdcall调用一般采用windll.LoadLibrary或者WinDLL方式调用,如果约定cdecl调用一般采用cdll.LoadLibrary或者CDLL调用(windll和cdll分别是WinDLL类和CDll类的对象)。

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访问到。

# 调用同目录下的模块,如:father/myself/test.py
import test 或 from test import *
# 调用同级目录下的模块,如:father/brother/test.py
import brother.test 或 from brother.test import *
# 调用子目录下的模块,子目录必须要有 __init__.py文件。如:django/myself/child/test.py
import myself.child.test 或 from myself.child.test import *
# 调用上级目录下的模块,如:father/myself/test.py
import 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先了)。

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

小编综合来说:

华中数控提供了C/C++、C#两种二次开发用到的API函数,Python没法直接调用这些API。所以这我还需要用C/C++调用类库中的方法将函数重新封装下,第二再交给Python来处理。以上内容是小编给大家分享的【Python实战014:解决DLL动态链接库调用时遇到的问题】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

拓展知识:

前沿拓展:

不是有效的win32应用程序

提示不是有效的32应用程序有两种原因

1、这个文件是不是32位的应用程序,如果是64位的软件是无法在32位系统运行的,这个就会提示该程序不是有效的32应用关联性被破坏了,可能是人为或者**篡改的。

解决方环既话织法:

1、原因1的下载对应的32位版本软件安装运行即可。

2、按WIN键+R键打开运行窗口,输入REGEDIT按回车键打开。


最近有个项目需要希望可以采集华中数控系统的智能主轴负载并在WEB前端以波动图来展示负载数据,这里我打算利用Vue+Echarts来构建WEB前端展示、Python+Django来搭建WEB后台服务、由于是实时刷新数据所以这里利用WebSocket来实现数据交互、最后就是实现华中数控的数据采集。华中提供了DLL可以用来调用,所以这里我们需要在python中来引入DLL文件。

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

ctypes库

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

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

DLL调用方式

为什么ctypes提供了这么多种dll调用方式,因为dll在导出函数时可以声明调用约定(stdcall或者cdecl),不同的约定方式导出的函数名也是不同的所以Python加载时也提供了相应的加载函数。如果约定stdcall调用一般采用windll.LoadLibrary或者WinDLL方式调用,如果约定cdecl调用一般采用cdll.LoadLibrary或者CDLL调用(windll和cdll分别是WinDLL类和CDll类的对象)。

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访问到。

# 调用同目录下的模块,如:father/myself/test.py
import test 或 from test import *
# 调用同级目录下的模块,如:father/brother/test.py
import brother.test 或 from brother.test import *
# 调用子目录下的模块,子目录必须要有 __init__.py文件。如:django/myself/child/test.py
import myself.child.test 或 from myself.child.test import *
# 调用上级目录下的模块,如:father/myself/test.py
import 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先了)。

不是有效的win32应用程序(不是有效的win32应用程序是什么意思)

小编综合来说:

华中数控提供了C/C++、C#两种二次开发用到的API函数,Python没法直接调用这些API。所以这我还需要用C/C++调用类库中的方法将函数重新封装下,第二再交给Python来处理。以上内容是小编给大家分享的【Python实战014:解决DLL动态链接库调用时遇到的问题】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

拓展知识:

原创文章,作者:九贤生活小编,如若转载,请注明出处:http://www.wangguangwei.com/19720.html