2016-09-06 69 views
1

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

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

我使用XE7在Windows10

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 

回答

0

您可以使用WNetGetConnection()WNetGetUniversalName()解决网络映射驱动器盘符/路径,其网络UNC路径,然后你可以使用一个DNS查询(gethostbyname()或更好的getaddrinfo())获取在UNC路径中指定的服务器名称的IP地址。

+0

我在绑定你的答案后编辑了我的原始问题。你可以给我一个例子,使用GetAddrInfo() – Gerhard

+0

**'gethostname()'**返回本地机器的名称。摆脱那个电话。从WNetGetConnection()传递服务器名称(不是完整的UNC)到''gethostbyname()'**,或者更好'getaddrinfo()'。如果你四处搜索,有很多'getaddrinfo()'示例可用。如果'WNetGetConnection()'返回'\\ server \ path',则将'server'传递给'gethostbyname()'''getaddrinfo()'。 –