Delphi - 映射驱动器 IP 地址

Delphi - mapped drive ipaddress

如何使用 Delphi 找到映射驱动器的 IP 地址。我当前的系统使用映射驱动器连接到 Pervasive 数据库。我正在切换到 PostgreSQL,需要映射驱动器的 IP 地址才能连接到 PostgreSQL 服务器。

我在一台名为 HP 的机器上映射了一个文件夹 (Y:)。将 Y: 传递给 WNetGetConnection returns 机器名称 HP 但是当我在 GetHostName 中使用此值时它 returns 本地机器的详细信息。

我在 Windows10

上使用 XE7
  LPathStr:=MAX_PATH;
  If WNetGetConnectionA(PAnsiChar('Y:'), PathStr, LPathStr) = 0 then
  begin
    if GetHostName(PathStr,SizeOf(PathStr)) = 0 then
    begin
      varHostEnt := GetHostByName(PathStr);
      varTInAddr.S_addr := u_long(pu_long(varHostEnt^.h_addr_list^)^);
      IpAddr := inet_ntoa(varTInAddr);
      HostName := PathStr;
    end

您可以使用WNetGetConnection() or WNetGetUniversalName() to resolve a network-mapped drive letter/path to its network UNC path, and then you can use a DNS query (gethostbyname() or better getaddrinfo())获取UNC路径中指定的服务器名称的IP地址。