返回

在 Wine 中使用自定义 DLL 的困扰:常见错误的全面指南

Linux

在 Wine 中使用自定义 DLL:解决常见错误的全面指南

简介

对于经验丰富的程序员和技术爱好者来说,在 Wine 中使用自定义 DLL 可以带来许多好处。但是,可能会遇到奇怪的错误,阻碍应用程序的正常运行。本文旨在解决在 Wine 中使用自定义 DLL 时遇到的最常见错误,并提供分步解决方法。

错误类型及解决方法

1. 字体错误:font:opentype_enum_font_names handle name format 1

  • 确保 user32.c 中的 founction_A 函数声明正确。
  • 检查 user32.cwin32u.c 文件中是否存在不必要的调试语句或代码。

2. HID 错误:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005

  • 确保 win32u.c 中的 founction_B 函数声明正确。
  • dlls/user32/Makefile.indlls/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.cwin32u.c 文件中任何不必要的代码。

其他提示

  • 确保 Wine 版本是最新的。
  • 尝试在其他应用程序中加载 DLL,以查看问题是否特定于某个应用程序。
  • 加入 Wine 社区论坛,与其他用户和开发人员交流。

结论

在 Wine 中使用自定义 DLL 是一项复杂的任务,需要对 DLL 构建、Wine 环境和潜在错误的深入理解。通过遵循本文提供的分步解决方案,你可以解决常见错误,并在 Wine 中成功使用你的自定义 DLL。

常见问题解答

  1. 为什么 Wine 会加载自定义 DLL 失败?

    • DLL 声明、导出、导入或符号不正确。
    • 不必要的代码或调试语句干扰了加载过程。
    • Wine 版本已过时。
  2. 如何调试 Wine 中的 DLL 加载错误?

    • 启用 Wine 调试,并检查 /home/<your_username>/.wine/dosdevices/c/windows/system32/wine.log 文件以获取详细信息。
    • 检查 DLL 日志,并使用 dlltool -l tmp.dll 命令查看 DLL 符号。
  3. 如何避免加载错误?

    • 仔细检查 DLL 声明、导出和导入。
    • 移除不必要的代码和调试语句。
    • 确保 Wine 版本是最新的。
  4. 为什么在某些应用程序中加载 DLL 会成功,而在其他应用程序中加载失败?

    • 加载错误可能是由于应用程序特定的兼容性问题引起的。
    • 尝试在其他应用程序中加载 DLL,以隔离问题。
  5. 如何寻求更多帮助?

    • 加入 Wine 社区论坛,向其他用户和开发人员寻求支持。
    • 咨询 Wine 官方文档和教程。