在使用之前确定DLL的存在

时间:2009-11-17 08:58:53

标签: visual-c++ dll import-libraries

使用Visual C ++ 2008 Express Edition。我正在将我的应用程序与导入库(.lib)链接,以查找目标系统上可能存在或可能不存在的DLL。在你问之前:我不能用我的应用程序分发DLL。

如果DLL不存在,只要我从DLL中调用一个函数(但不会更快!),我会收到一条消息,如

  

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

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

简单的LoadLibrary通话是否足够?如果没有,我还需要做什么?甚至可以这样做吗?

更新:我当然可以使用LoadLibrary,然后使用GetProcAddress我想要使用的每个功能。但这很麻烦,我希望避免这种情况,而只是使用提供的导入库。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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