在Windows 10的 Python 3.12中加载32位 DLL

编程语言 2026-07-12

我正在尝试加载一个32位的C 动态链接库,在Windows 7下使用Python 2.7的 32位版本时很简单:

driver = ctypes.cdll.LoadLibrary("VBridge.dll")
driver.Connect()

image

我和 msl-loadlib 的模块开发者有一个讨论串,我们正在寻找功能等价的3.10版代码。

加载的附加DLL与主DLL位于同一目录。厂商的测试应用程序也在同一目录下,使用相同的库就能正常运行。额外的复杂性在于Python 3.10是 64位的,但即使是 [msl-loadlib] 的交互式32位 Py3.13服务器控制台:

python -c "from msl.loadlib import Server32; Server32.interactive_console()"

无法找到依赖项 FileNotFoundError: Could not find module 'VBridge.dll' (or one of its dependencies). Try using the full path with constructor syntax.msl服务器

我又读到一些关于 >=3.8路径搜索变更的讨论 文件未找到错误:无法找到模块 'libvlc.dll';我猜想VLC的 DLL与绑定的问题在那里也和我的驱动处于同一阵营。
我尝试了 os.add_dll_directory(os.getcwd())ctypes.windll.AddDllDirectory(dll_directory)LOAD_WITH_ALTERED_SEARCH_PATH

解决方案

CristiFati 的帖子和 msl-loadlib 的讨论给出了解决方案和示例。

要点摘要:在Windows 10/11的 64位环境下加载旧的32位 DLL时,msl-loadlib会启动一个IPC服务器进程,使用它自带的32位 Python 3.13,64位客户端的函数就可以调用。

对我来说关键是在Windows 10上,那个用MSVC 2008编译的旧DLL要求我把32位 Python的 server32-windows.exe 设置为Win7兼容性模式,才能与旧DLL正确通信。然后一切就都能正常工作。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章