但是,在较旧版本的Windows(例如,XP)上运行应用程序时,整个应用程序在启动时崩溃,并显示错误“无法找到指定的过程”.虽然错误没有指定找不到哪个过程,但如果我注释掉对SHLoadLibraryFromItem的调用,那么一切正常.
问题:
>为什么Windows试图找到SHLoadLibraryFromItem,即使它没有在XP上调用?
>有没有办法让Windows不这样做,即只在运行Windows 7时找到SHLoadLibraryFromItem,即某种延迟绑定?
>如果没有,最好的方法是什么?
我能想到的唯一方法就是:
>使用LoadLibrary加载SHLoadLibraryFromItem所在的Windows DLL,并使用GetProcAddress手动获取地址到指向函数的指针,并使用指针调用SHLoadLibraryFromItem?
>有两个DLL:一个包含Windows 7支持的功能,只有在Windows 7上运行时才会加载这些功能.
还有其他想法吗?我真的更喜欢上面提到的某种懒惰绑定.
更新
请仔细阅读我实际操作的内容.我在第一段中明确指出,除非我知道应用程序在WINDOWS 7上正在运行,否则不会调用SHLoadLibraryFromItem.
应用程序仅在加载DLL时崩溃.
使用LoadLibrary和GetProcAddress是解决此问题的“标准”方法.
使用两个DLL对您没有帮助,因为只要其中一个无法加载您的应用程序仍然无法启动.您可以通过使用延迟加载来解决这个问题,将所有依赖于新O / S的代码放在一个单独的模块中,并将所有对该模块的调用包装在Win32 SEH异常处理程序中(延迟加载时会出现SEH异常)无法加载模块).优点是你可以使用“自动”链接而不需要乱七八糟的函数指针,但异常处理可能非常糟糕.
This article解释了一下,并给出了一些如何整齐地包装它的例子.
原文地址:https://www.jb51.cc/windows/363670.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。