代码如下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.各位大侠帮忙解决一下,在线等待马上结贴
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.各位大侠帮忙解决一下,在线等待马上结贴
你用这个看一看
var ComputerName: string;
GetComputerName(pchar(ComputerName),256) ;
edit1.text:=computername;
你的错在没没给ComputerName这个指针分配内存!
var ComputerName: pchar;//是指针型变量,使用时GETMEM()分配内存,或让它指向某个string!
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;
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.
AnsiString str;
DWORD size = 255;
str.SetLength(size +1);
GetComputerName(str.c_str(), &size) ;
我在
FreeMem(ComputerName); 之后,
showmessage('字符串')
‘字符串’里带有ComputerName这个变量
‘字符串’的长度出现了问题,
我赋值的长度大概100左右
系统把后面的截掉很多,导致错误。
该如何解决。
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;上面的例子就解决问题了.