返回
在 Wine 中使用自定义 DLL 的困扰:常见错误的全面指南
Linux
2024-03-30 12:51:12
在 Wine 中使用自定义 DLL:解决常见错误的全面指南
简介
对于经验丰富的程序员和技术爱好者来说,在 Wine 中使用自定义 DLL 可以带来许多好处。但是,可能会遇到奇怪的错误,阻碍应用程序的正常运行。本文旨在解决在 Wine 中使用自定义 DLL 时遇到的最常见错误,并提供分步解决方法。
错误类型及解决方法
1. 字体错误:font:opentype_enum_font_names handle name format 1
- 确保
user32.c
中的founction_A
函数声明正确。 - 检查
user32.c
和win32u.c
文件中是否存在不必要的调试语句或代码。
2. HID 错误:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
- 确保
win32u.c
中的founction_B
函数声明正确。 - 在
dlls/user32/Makefile.in
和dlls/win32u/Makefile.in
中,将tmp
添加到IMPORT
列表。
3. DLL 初始化错误:module:loader_init "comctl32.dll" failed to initialize, aborting
- 检查 DLL 导出是否正确声明,方法是使用
dlltool -l tmp.dll
命令。 - 重新编译 DLL 和 Wine。
4. 应用程序加载错误:module:loader_init Initializing dlls for L"C:\Foxmail 7.2\Foxmail.exe" failed, status c0000005
- 启用 Wine 调试(
export WINE_DEBUG=err,fixme
),然后检查/home/<your_username>/.wine/dosdevices/c/windows/system32/wine.log
文件以获取更多详细信息。 - 移除
user32.c
和win32u.c
文件中任何不必要的代码。
其他提示
- 确保 Wine 版本是最新的。
- 尝试在其他应用程序中加载 DLL,以查看问题是否特定于某个应用程序。
- 加入 Wine 社区论坛,与其他用户和开发人员交流。
结论
在 Wine 中使用自定义 DLL 是一项复杂的任务,需要对 DLL 构建、Wine 环境和潜在错误的深入理解。通过遵循本文提供的分步解决方案,你可以解决常见错误,并在 Wine 中成功使用你的自定义 DLL。
常见问题解答
-
为什么 Wine 会加载自定义 DLL 失败?
- DLL 声明、导出、导入或符号不正确。
- 不必要的代码或调试语句干扰了加载过程。
- Wine 版本已过时。
-
如何调试 Wine 中的 DLL 加载错误?
- 启用 Wine 调试,并检查
/home/<your_username>/.wine/dosdevices/c/windows/system32/wine.log
文件以获取详细信息。 - 检查 DLL 日志,并使用
dlltool -l tmp.dll
命令查看 DLL 符号。
- 启用 Wine 调试,并检查
-
如何避免加载错误?
- 仔细检查 DLL 声明、导出和导入。
- 移除不必要的代码和调试语句。
- 确保 Wine 版本是最新的。
-
为什么在某些应用程序中加载 DLL 会成功,而在其他应用程序中加载失败?
- 加载错误可能是由于应用程序特定的兼容性问题引起的。
- 尝试在其他应用程序中加载 DLL,以隔离问题。
-
如何寻求更多帮助?
- 加入 Wine 社区论坛,向其他用户和开发人员寻求支持。
- 咨询 Wine 官方文档和教程。