编写:Ove K鍁en <ovek@winehq.com>
(提取自 wine/documentation/dll-overrides)
wine.conf 指令(directive) [DllDefaults] 和 [DllOverrides] 是有些混乱的主题。这些指令的最终目的是足够清楚的,通过 - 给出一个选择,Wine 应该使用自己的内置 DLL,或者应该使用在现存的 Windows 安装中找到的 .DLL 文件? 本文档将解释这些特征是如何工作的。
一个“固有的”DLL 是为真实的 Microsoft Windows 写的一个 .DLL 文件。
一个“内置的”DLL 是一个 Wine DLL。它们可以要么是 libwine.so 的一部分, 要么是在新近的版本中,在 Wine 在需要的时候可以装载的一个特殊的 .so 文件。
一个“elfdll”是有着一个特殊的 Windows 式样的文件结构的一个 Wine .so 文件,它尽可能的与 Windows 相接近,并且通过使用特殊的 ELF 装载器和连接器技巧,可以无缝的与“固有的” DLL 进行动态连接。Bertho Stultiens 正在做这项工作,但这个特征还没有合并到 Wine 中(因为政治上的原因和缺乏时间),所以这个 DLL 类型此时在官方的 Wine 中不存在,“内置的” DLL 类型获取了 elfdll 的一些特征(比如动态装载),所以“elfdll”的功能可能即将融入“内置”类型中。
一个固有的 Unix .so 文件,加上在装载库时生成的(? on the fly )调用惯例转换 thunk。(with calling convention conversion thunks generated on the fly as the library is loaded) 对于“glide”这样的在 Windows 和 Unix 二者上使用相同的 API 的库,这是非常有用的。
如果正在处理的 DLL 未在 [DllOverrides] 段中找到,这个选项指定 Wine 应当以什么次序查找可获得的 DLL 类型。
有的时候,在缺省的配置文件中有一个叫 [DllPairs]
的段,它已经被废弃了,因为组对信息已经被嵌入到 Wine
自身中了。(本段的目的只不过是如果用户尝试组对(pair
codependent)不同类型的16-bit/32-bit DLL 则发起警告。)
如果你的 wine.conf 或 ~/.wine/config
中仍然有它,你删除它是安全的。
本段指定如何处理特定的 DLL,特别是,如果你从一个真实的 Windows 配置中得到一些“固有的”DLL,那么就要在这里指定是否使用它们。因为内置的 DLL 仍不能与固有的 DLL 无缝的混合,特定的 DLL 依赖可能有问题,但在 Wine中对许多流行的 DLL 配置存在着工作项目(workaround)。参见 WWN 的 [16] 状态页来找出你要用的 DLL 是否在 Wine 中被实现了。
当然也可以通过显式的使用 Wine 的 --dll 命令行选项来屏弃这些设置(详情参见手册页)。下面是对选择你的最优的配置的提示(列出 16/32-bit DLL 对):
它们的固有版本永远不能工作,所以不用尝试了。保持为 builtin。
图形设备接口。尝试运行固有的 GDI 没什么作用。保持为 builtin。
窗口管理和标准控件。有时可能要使用 Win95 的 native 版本(如果依赖于它的所有其他 DLL,比如 comctl32 和 comdlg32,也运行 native 版本的话)。但是,在地址空间独立(Address Space Separation)之后就不可能了,所以保持为 builtin。
NT 内核 API。尽管没有很好的编制文档,它的 native 版本是永远不能工作的。保留为 builtin。
Win32s (在 Win3.x 中)。它的 native 版本可能是永远不能工作的。保留为 builtin。
NT 的 Win16 支持库。它的 native 版本可能是永远不能工作的。保留为 builtin。
Win16 内核材料。它的 native 版本是永远不能工作的。保留为 builtin。
显示器驱动程序。明确的保留为 builtin。
工具帮助器例程。这很少出问题。保留为 builtin。
版本。很少有用和处理它(mess with)。
注册表和安全特征。它的 native 版本是否工作是两可的。
通用对话框,比如颜色选择器、字体对话框、打印对话框、打开/保存对话框,等等。尝试 native 版本是安全的。
通用控件。它们是工具条、状态条、列表控件、等。尝试 native 版本是安全的。
Shell 接口(桌面、文件系统、等)。它是 Windows 中未编制文档最严重的部分之一,你可能走运的能使用它的 native 版本,如果你需要的话。
Windows 套接口。它的 native 版本不能在 Wine 下工作,所以保留为 builtin。
给 wsock32 的 ICMP 例程。如同 wsock32,保留为 builtin。
由于 thunking 要点,它的 native 版本可能不工作。保留为 builtin。
Lempel-Ziv 压缩。 Wine 的 builtin 版本应当工作的很好。
高级 SCSI 外设接口。它的 native 版本可能不工作。保留为 builtin。
C 运行时库。它的 native 版本很容易的比 Wine 的版本工作的好。
打印机缓冲池。 你好象没有那么走运使用它的 native 版本。
DirectDraw/Direct3D(直接绘制/直接三维)。因为 Wine 没有实现 DirectX HAL,现在它的 native 版本不能工作。
DirectInput(直接输入)。它的 native 版本是否工作是两可的。
DirectSound(直接声音)。可能运行它的 native 版本,但不要依仗它。
DirectPlay(直接播放)。它的 native 版本应该工作的非常好,如果是完全的话。
多媒体系统。它的 native 版本好象不能工作。保留为 builtin。
音频压缩管理器。如果你把 msacm.drv 设置为相同的,它的 builtin 版本工作的非常好。
Windows 视频。 可以安全的(和推荐)尝试 native 版本。
CD 音频 MCI 驱动程序。
MIDI Sequencer MCI 驱动程序(.MID 回放)。
Wave 音频 MCI 驱动程序(.WAV 回放)。
AVI MCI 驱动程序(.AVI 视频回放)。最好使用 native 版本。
Animation MCI 驱动程序。
音频压缩管理器。设置为与 msacm32 相同。
MIDI Mapper。
这是 Wine 用于 thunking 目的的一个伪装 DLL。它的 native 版本不存在。