为什么Windows在调用LoadLibrary时不需要完整的文件路径,或者对于带有注册dll的clsid等。在什么情况下,有人会受益于不得不回到DLL搜索顺序找到一个DLL ?
我的意思是,像%SystemRoot%或%ProgramFiles%这样的变量可以把你带到合适的文件夹,而.会把你留在当前目录。那么为什么要允许这种模糊性呢?
对于与GetProcAddress()
的显式链接,我认为应该尽可能使用到DLL的绝对路径。
对于与.lib文件的隐式链接,DLL的名称必须在链接时确定,这排除了绝对路径。
将DLL放在与可执行文件相同的目录下,在%Program Files%下并受UAC保护,并使用新的DLL搜索顺序,这是最安全的。