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会接受正斜杠而没有任何问题?
在将请求传递给本机API之前,Windows API中的文件I/O将正斜杠("/")转换为反斜杠("\").本机API需要NT样式的名称.当路径名以"\\?\"作为前缀时,不会执行转换.有时您无法控制是否存在此前缀(例如,在使用Windows API检索基本路径时).
简而言之:使用本机路径分隔符是安全的解决方案.违反合同并使用正斜杠可能会突然停止工作.
完整信息记录在MSDN的命名文件,路径和命名空间中.