使用Visual C ++ 2008 Express Edition。我正在将我的应用程序与导入库(.lib
)链接,以查找目标系统上可能存在或可能不存在的DLL。在你问之前:我不能用我的应用程序分发DLL。
如果DLL不存在,只要我从DLL中调用一个函数(但不会更快!),我会收到一条消息,如
此应用程序无法启动,因为找不到SomeLibrary.dll。重新安装应用程序可能会解决此问题。
我想要发生的是,应用程序检测到DLL不存在,并且只是禁用依赖于它的功能。我可以打电话给LoadLibrary
并查看它是否成功,但我不确定这是否足够。也许导入库在幕后做了更多的工作?
简单的LoadLibrary
通话是否足够?如果没有,我还需要做什么?甚至可以这样做吗?
更新:我当然可以使用LoadLibrary
,然后使用GetProcAddress
我想要使用的每个功能。但这很麻烦,我希望避免这种情况,而只是使用提供的导入库。
答案 0 :(得分:1)
不,LoadLibrary()
正是您想要的。使用它的唯一后果是在成功加载DLL时将函数指针设置到DLL中的麻烦,但是在网络的其他地方很好地覆盖了它的过程。
答案 1 :(得分:1)
如果你去检查here(MSDN),你会看到当LoadLibrary
加载失败时,该函数返回一个NULL值,你甚至可以检查特定的错误(应该是一个文件不是发现)使用GetLastError
函数。
答案 2 :(得分:1)
这是DelayLoad链接器选项的用途,但我不知道Express版是否支持它。