CGI DLL(内置Delphi)物理路径

时间:2012-11-26 21:48:05

标签: windows delphi winapi

我在Windows 2008服务器上部署了使用Delphi 2007构建的CGI DLL。在内部我需要使用当前的DLL路径。

通常我可以使用GetModuleFileNameGetModuleName,但在服务器上他们都会返回:

\\?\c:\my\correct\path

为什么前4个字符?它看起来像一个网络路径?有没有办法排除前4个字符?

1 个答案:

答案 0 :(得分:1)

相关的documentation是:

  

最大路径长度限制

     

在Windows API中(以下讨论了一些例外情况)   段落),路径的最大长度为MAX_PATH,即   定义为260个字符。本地路径的结构如下   顺序:驱动器号,冒号,反斜杠,名称组件分隔   反斜杠和终止空字符。例如,   驱动器D上的最大路径是“D:\某些256个字符的路径字符串”   其中“”表示不可见的终止空字符   当前的系统代码页。 (字符<>用于此处   视觉清晰度,不能成为有效路径字符串的一部分。)

     

注意 Windows API中的文件I / O函数将“/”转换为“\”作为一部分   将名称转换为NT样式的名称,除非使用   “\\?\”前缀详见以下部分。

     

Windows API具有许多也具有Unicode版本的函数   允许一个扩展长度的路径,最大总路径长度为   32,767个字符。这种类型的路径由组件组成   用反斜杠分隔,每个都取决于返回的值   GetVolumeInformation的lpMaximumComponentLength参数   function(此值通常为255个字符)。指定一个   扩展长度路径,使用“\\?\”前缀。例如,“\\?\ D:\ very   漫长的道路“。

     

注意最大路径为32,767个字符是近似值,因为   “\\?\”前缀可以由系统扩展为更长的字符串   运行时间,此扩展适用于总长度。

     

“\\?\”前缀也可以用于根据构造的路径   通用命名约定(UNC)。使用指定此类路径   UNC,使用“\\?\ UNC \”前缀。例如,“\\?\ UNC \ server \ share”,   其中“server”是计算机的名称,“share”是其名称   共享文件夹。这些前缀不用作路径的一部分   本身。它们表明路径应该传递给系统   最小的修改,这意味着你不能使用前进   斜杠表示路径分隔符,或表示句点分隔符的句点   当前目录,或表示父目录的双点。   因为您不能将“\\?\”前缀与相对路径一起使用,   相对路径始终限制为总共MAX_PATH个字符。

只要您调用Windows API函数的Unicode版本,就不需要删除"\\?\"前缀。因为您所处的路径是有效路径。

正如我们在评论中发现的那样,您正在调用API函数的ANSI版本。当您这样做时,"\\?\"前缀无效。所以,坚持使用Unicode API函数,这一切都很好!