1

使用 Visual C++ 2008 速成版。我正在将我的应用程序与.lib目标系统上可能存在或不存在的 DLL 的导入库 () 链接。在您问之前:我无法将 DLL 与我的应用程序一起分发。

如果 DLL 不存在,只要我从 DLL 调用一个函数(但不会更早!),我会收到类似的消息

此应用程序无法启动,因为 SomeLibrary.dll 未找到。重新安装应用程序可能会解决此问题。

相反,我想要发生的是应用程序检测到 DLL 不存在,并简单地禁用依赖它的功能。我可以打电话LoadLibrary看看它是否成功,但我不确定这是否足够。也许导入库在幕后做了更多的工作?

一个简单的LoadLibrary调用就足够了吗?如果没有,我还需要做什么?这甚至可以做到吗?

更新:我当然可以使用LoadLibrary,然后GetProcAddress对于我想使用的每个功能。但这很麻烦,我希望避免这种情况并简单地使用提供的导入库。

4

3 回答 3

1

不,LoadLibrary()正是你想要的。使用它的唯一后果是当您成功加载 DLL 时将函数指针设置到 DLL 中很麻烦,但是该过程在网络上的其他地方都有很好的介绍。

于 2009-11-17T09:02:50.067 回答
1

如果你去这里检查(MSDN)你会看到当LoadLibrary加载失败时,函数返回一个 NULL 值,你甚至可以使用函数检查特定的错误(应该是一个文件未找到)GetLastError

于 2009-11-17T09:03:02.417 回答
1

这就是 DelayLoad 链接器选项的用途,但我不知道 Express 版是否支持它。

于 2009-11-17T09:44:00.333 回答