如何解决尝试将Win32ui与pywin32一起使用会给出:动态链接库DLL初始化例程失败 更新
我正在尝试使用pywin32中的win32ui模块(是的,我具有正确的版本)。 我的win32gui模块可以正常工作,但是ui模块却给了我错误。 我已经尝试过: 重新安装python, 还要添加PYTHON_PATH系统变量, 运行安装后pywin32脚本, 对于其余的事情,我有点力所能及。
Python版本:3.9(64位) Pywin32版本:pywin32-228.win-amd64-py3.9(.exe文件名我不知道如何查找版本) 只是为了清除我唯一的代码是:
import win32ui
(这是我的第一个问题,所以我希望我做对了)
解决方法
更新
将(以下)修复程序(以及更多)应用于原始资源,进行构建,然后将 .whl 上传到 [GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyWin32/v228 。
但是,由于此错误有点像是“破坏者”(自 v228 发布以来已有 4 + 个月),所以我期望 v229 很快(在接下来的几天左右)。
检查[SO]: PyWin32 and Python 3.8.0 (@CristiFati's answer)(开头)的安装步骤部分,以获取有关如何安装 .whl s的详细信息。
它在以下位置可以不断复制:
- Python3。 9 64bit 和 32bit (适用于旧版本)
- PyWin32 228 (或更早版本)
[cfati@CFATI-5510-0:e:\Work\Dev\GitHub\CristiFati\pywin32\src]> sopr.bat *** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages *** [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.09.00_test0\Scripts\python.exe" Python 3.9.0 (tags/v3.9.0:9cf6752,Oct 5 2020,15:34:40) [MSC v.1927 64 bit (AMD64)] on win32 Type "help","copyright","credits" or "license" for more information. >>> import win32ui Traceback (most recent call last): File "<string>",line 1,in <module> File "c:\Install\pc064\Python\Python\03.09.00\Lib\ctypes\__init__.py",line 374,in __init__ self._handle = _dlopen(self._name,mode) OSError: [WinError 1114] A dynamic link library (DLL) initialization routine failed >>> import win32api
我为进行了一些调试(创建了 VStudio 2015 解决方案(包含2个项目:用于 Python 3.9 和 Python 3.8 ) win32ui ),事实证明这是一个访问冲突( segfault )。
“最佳”部分是发生在之前 DllMain 。
我可以使用调试器的最后一行是[GitHub]: mhammond/pywin32 - (b228) pywin32/Pythonwin/win32RichEdit.cpp#225:
PyCCtrlView_Type PyCRichEditView::type("PyCRichEditView",&PyCCtrlView::type,&PyCRichEditCtrl::type,RUNTIME_CLASS(CRichEditView),sizeof(PyCRichEditView),PYOBJ_OFFSET(PyCRichEditView),PyCRichEditView_methods,GET_PY_CTOR(PyCRichEditView));
这是静态成员。由于2 nd 和3 rd 参数也是静态成员(没有注意它们是指针的事实),所以我认为它是{{3} },然后我追了一些鬼。
无论如何,今天我注意到[ISOCPP]: What’s the “static initialization order ‘fiasco’ (problem)”?(并且[GitHub]: mhammond/pywin32 - Ensure we hold the GIL as win32ui initializes and calls back into Python从那里开始寻址)。
应用补丁可以解决问题:
[prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.09.00_test0\Scripts\python.exe" Python 3.9.0 (tags/v3.9.0:9cf6752,"credits" or "license" for more information. >>> import win32ui >>> import win32api
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。