当前位置:  开发笔记 > 开发工具 > 正文

LoadLibraryW和POSIX路径分隔符

如何解决《LoadLibraryW和POSIX路径分隔符》经验,为你挑选了1个好方法。

LoadLibrary的MSDN文档警告不要使用普通的Unix斜杠"/":

指定路径时,请确保使用反斜杠(\),而不是正斜杠(/).

在调用此API时,我无法使用正斜杠或反斜杠(或两者)找到任何问题.我尝试了以下路径名:

c:/foo/bar/baz.dll
/foo/bar/baz.dll
c:/foo/bar\\baz.dll
/foo/bar\\baz.dll
./bar/baz.dll

所有组合都按预期工作.为什么MSDN建议不要使用正斜杠作为路径分隔符?

编辑:

关于UNC名称,它也适用于"//127.0.0.1/c$/foo/bar/baz.dll".

是的,如果添加"\?\",它不会加载库,但_wfopen也无法打开文件.LoadLibraryW与接受/不接受正斜杠的任何其​​他Windows API有何不同?为什么有关于LoadLibraryW而不是CreateFileW的明确警告.

CreateFile:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v = vs.85).aspx

要创建或打开的文件或设备的名称.您可以在此名称中使用正斜杠(/)或反斜杠().

LoadLibrary:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v = vs.85).aspx

指定路径时,请确保使用反斜杠(),而不是正斜杠(/).

当使用正斜杠(/)时,是否存在其他可能导致LoadLibrary失败的陷阱,而其他Windows API会接受正斜杠而没有任何问题?



1> IInspectable..:

在将请求传递给本机API之前,Windows API中的文件I/O将正斜杠("/")转换为反斜杠("\").本机API需要NT样式的名称.当路径名以"\\?\"作为前缀时,不会执行转换.有时您无法控制是否存在此前缀(例如,在使用Windows API检索基本路径时).

简而言之:使用本机路径分隔符是安全的解决方案.违反合同并使用正斜杠可能会突然停止工作.

完整信息记录在MSDN的命名文件,路径和命名空间中.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有