procedure TForm1.Button1Click(Sender: TObject);
var
    aaa: PChar;
begin
    GetMem(aaa, MAX_COMPUTERNAME_LENGTH + 1);
    GetComputerName(aaa, MAX_COMPUTERNAME_LENGTH + 1);
end;执行是“GetComputerName(aaa,MAX_COMPUTERNAME_LENGTH + 1)”编译不过去提示
[Error] Unit1.pas(30): Types of actual and formal var parameters must be identical
这是为什麽,如何解决。谢谢! 

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    sBuffer: PChar;
    sSize: Cardinal;
    begin
    sSize := 255;
    GetMem(sBuffer, sSize + 1);
    try
    if GetComputerName(sBuffer, sSize) then
    label1.caption := sBuffer;
    finally
    FreeMem(sBuffer);
    end;
    end;用这段程序一定没问题
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        aaa:array 0..255 of char;
        S:cardinal;
    begin
       s:=256;
        GetComputerName(aaa, s);
         
    end;
      

  3.   

    function GetTheComputerName: string;
    var
      ComputerName: array [0..MAX_COMPUTERNAME_LENGTH] of Char;
      nSize: DWORD;
    begin
      nSize := MAX_COMPUTERNAME_LENGTH;
      FillChar(ComputerName, MAX_COMPUTERNAME_LENGTH, 0);
      GetComputerName(ComputerName, nSize);
      Result := ComputerName
    end;
      

  4.   

    主要原因是你的声明pchar变量必须在使用前,初始化一个大小,具体的代码你可以参考 delphi开发人员指南,上的介绍!我认为你不要用pchar变量,用string 变量,最后在用pchar(stringaaa)强制转换以下最好了,因为string 变量是自动维护的,自动释放的。谢谢了,给分吧!
      

  5.   

    //==============================================================================
    //取得客户端‘主机名’‘IP地址’************************************************
    //==============================================================================
    procedure GetClientInfo(var ClientName, IPAddress: string);
    var WSAData: TWSAData;
        HostEnt: PHostEnt;
    begin
      {no error checking...}
      WSAStartup(2, WSAData);
      SetLength(ClientName, 255);
      Gethostname(PChar(ClientName), 255);
      SetLength(ClientName, StrLen(PChar(ClientName)));
      HostEnt := GetHostByName(PChar(ClientName));
      with HostEnt^ do IPAddress := Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
      WSACleanup;
    end;
      

  6.   

    quark(夸克):
        你好
        你写的过程中TWSAData,PHostEnt应引用哪些单元?
      

  7.   

    function MyComputerName:string;
    var
    sBuffer: PChar;
    sSize: Cardinal;
    begin
    result:='';
    sSize := MAX_COMPUTERNAME_LENGTH;
    GetMem(sBuffer, sSize + 1);
    try
    if GetComputerName(sBuffer, sSize) then
    result:= sBuffer;
    finally
    FreeMem(sBuffer,MAX_COMPUTERNAME_LENGTH +1);
    end;
    end;我也来抢分哦。
      

  8.   

    uses winsock呵呵,不过这个好像跟你的帖子没有关系哦。