博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在delphi2010中调用gethostname函数出现错误:E2010 Incompatible types: 'Array' and 'PAnsiChar'...
阅读量:5809 次
发布时间:2019-06-18

本文共 1617 字,大约阅读时间需要 5 分钟。

一个获取本机ip的函数:

 

 1 
class 
function TGlobal.GetLocalIP: 
string;
 2 
type TaPInAddr = 
array [
0..
10
of PInAddr; 
 3  PaPInAddr = ^TaPInAddr; 
 4 
var phe : PHostEnt; 
 5     pptr : PaPInAddr; 
 6     Buffer : 
array [
0..
63
of char;
 7     I : Integer; 
 8      GInitData : TWSADATA; 
 9 
begin 
10     WSAStartup($
101,ginitdata); 
11     result := 
''
12     gethostname(buffer,sizeof(buffer));
13     phe := gethostbyname(buffer); 
14    
if phe =
nil 
then exit; 
15    pptr := papinaddr(phe^.h_addr_list); 
16    I := 
0
17   
while pptr^[i] <> 
nil 
do 
18   
begin 
19  result := SysUtils.StrPas(inet_ntoa(pptr^[i]^)); 
20  inc(I); 
21    
end
22   WSACleanup; 
23 
end ;

在delphi2007下编译没有问题。在delphi2010下编译出现错误:E2010 Incompatible types: 'Array' and 'PAnsiChar'

错误定位在第12行。也就是调用gethostname函数出现了错误。根源在于在delphi2010中,gethostname函数的原型发生了改变:

由原来的:function gethostname(name: PChar; len: Integer): Integer; stdcall;

变成了:  function gethostname(name: PAnsiChar; len: Integer): Integer; stdcall;

 

函数做如下修改,编译通过:

 

 1 
function GetLocalIP: 
string;
 2 
type
 3   TaPInAddr = 
array [
0..
10
of PInAddr;
 4   PaPInAddr = ^TaPInAddr;
 5 
const
 6   SIZE_HOSTNAME=
250;
 7 
var
 8   phe       : PHostEnt;
 9   pptr      : PaPInAddr;
10   LStr      : AnsiString;
11   I         : Integer;
12   GInitData : TWSADATA;
13 
begin
14   WSAStartup($
101,ginitdata);
15   result := 
'';
16   SetLength(LStr, SIZE_HOSTNAME);
17   gethostname (PAnsiChar(LStr), SIZE_HOSTNAME);
18   phe := gethostbyname(PAnsiChar(LStr));
19   
if phe =
nil 
then exit;
20   pptr := papinaddr(phe^.h_addr_list);
21   I := 
0;
22   
while pptr^[i] <> 
nil 
do
23   
begin
24     result := SysUtils.StrPas(inet_ntoa(pptr^[i]^));
25     inc(I);
26   
end;
27   WSACleanup;
28 
end ;

 

 

 

 

 

 

转载于:https://www.cnblogs.com/lance2088/archive/2012/09/03/2669016.html

你可能感兴趣的文章
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
updatepanel中的GridView中的radiobuttonList怎么设置样式
查看>>
关于Android四大组件的学习总结
查看>>
java只能的round,ceil,floor方法的使用
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
puppet任务计划
查看>>
【CQOI2011】放棋子
查看>>