代码如下var  ComputerName: pchar;
  Size: cardinal;Size := MAX_COMPUTERNAME_LENGTH+1;
GetComputerName(ComputerName,Size) ;当执行到GetComputerName(ComputerName,Size) 报错
错误如下:
Access violation at address 77F99EF8 in module 'ntdll.dll'.write of address 00000000.各位大侠帮忙解决一下,在线等待马上结贴

解决方案 »

  1.   

    varCNameBuffer : PChar;fl_loaded : Boolean;CLen : ^DWord;beginGetMem(CNameBuffer,255);New(CLen);CLen^:= 255;fl_loaded := GetComputerName(CNameBuffer,CLen^);if fl_loaded thenComputerName := StrPas(CNameBuffer)elseComputerName := 'Unkown';FreeMem(CNameBuffer,255);Dispose(CLen);end; 
    你用这个看一看
      

  2.   

    用个一般的就行了嘛。
    var  ComputerName: string;
    GetComputerName(pchar(ComputerName),256) ;
    edit1.text:=computername;
    你的错在没没给ComputerName这个指针分配内存!
    var  ComputerName: pchar;//是指针型变量,使用时GETMEM()分配内存,或让它指向某个string!
      

  3.   

    没有分配空间
    var 
      ComputerName: pchar;
      Size: cardinal;
    begin
      Size := MAX_COMPUTERNAME_LENGTH+1;
      GetMem(ComputerName,Size);//为PChar分配空间
      try
        GetComputerName(ComputerName,Size);
        ShowMessage(String(ComputerName));
      finally
        FreeMem(ComputerName);//释放空间
      end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    CNameBuffer : PChar;
    fl_loaded : Boolean;
    CLen : ^DWord;
    computername:string;
    begin
    GetMem(CNameBuffer,255);
    New(CLen);
    CLen^:= 255;
    fl_loaded := GetComputerName(CNameBuffer,CLen^);
    if fl_loaded then
    ComputerName := StrPas(CNameBuffer)
    else
    ComputerName := 'Unkown';
    FreeMem(CNameBuffer,255);
    Dispose(CLen);
    edit1.Text:=computername;
    end;
    end.
      

  5.   

    试试下面的代码:
    AnsiString str;
    DWORD size = 255;
    str.SetLength(size +1);                  
    GetComputerName(str.c_str(), &size) ;
      

  6.   

    前面的问题解决了,但是
    我在
    FreeMem(ComputerName); 之后,
    showmessage('字符串')
    ‘字符串’里带有ComputerName这个变量
    ‘字符串’的长度出现了问题,
    我赋值的长度大概100左右
    系统把后面的截掉很多,导致错误。
    该如何解决。
      

  7.   

    var
       strName: String;
       arrName: array [0..MAX_COMPUTERNAME_LENGTH] of Char;
    begin
       FillChar(arrName, MAX_COMPUTERNAME_LENGTH + 1, 0);
       GetComputerName(arrName, MAX_COMPUTERNAME_LENGTH);
       strName := String(arrName);   // ??? ... ...
    end;上面的例子就解决问题了.