【发布时间】:2009-10-04 09:01:19
【问题描述】:
我正在使用其 SDK 为音频播放器 (foobar2000) 编写 DLL。我的 DLL 链接到另一个 DLL,我使用导入库 (.lib) 完成了此操作。但是,在运行时,音频播放器抱怨我的 DLL(链接到另一个的那个)缺少依赖项。
我不知道这是否可以概括,但是如果第一个DLL在运行时链接没有导入库,那么它不能链接到另一个带有导入库的DLL吗?如果确实如此,为什么会这样?
【问题讨论】:
我正在使用其 SDK 为音频播放器 (foobar2000) 编写 DLL。我的 DLL 链接到另一个 DLL,我使用导入库 (.lib) 完成了此操作。但是,在运行时,音频播放器抱怨我的 DLL(链接到另一个的那个)缺少依赖项。
我不知道这是否可以概括,但是如果第一个DLL在运行时链接没有导入库,那么它不能链接到另一个带有导入库的DLL吗?如果确实如此,为什么会这样?
【问题讨论】:
您可以在运行时将 DLL 链接到任何其他 DLL。链接 DLL 的规则是相同的。您可以发布缺少的依赖项的名称吗?依赖是正确的目录吗?
【讨论】:
您的 dll 应该可以正常工作,我认为您必须使用 dependency walker 检查它以查看您缺少什么
【讨论】:
当操作系统加载 DLL(当然也包括 EXE)时,它会查找其导入表并尝试加载导入的库。
如果没有找到,您会看到您描述的错误。
您可以使用 LoadLibrary 和 GetProcAddress 动态加载依赖库来防止它发生,但您需要处理缺少依赖项的错误。
【讨论】: