如何獲得本機的機器名(今天解決加300分) (30分)

  • 主题发起人 主题发起人 stuwe
  • 开始时间 开始时间
S

stuwe

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADO+D+SQL 7
在數據模塊裡面有
function TD.MyHostName:string;
var n:pchar;s:dword;
begin
GetMem(n,32);
try
GetComputerName(n,s);
Result:=n;
finally
FreeMem(n,32);
end;
end;
問題是這樣的,當在其它窗口中調用這個函數的時候,可以返回正確的機器名,
但我在寫入數據庫的時候,經常會出現亂碼(正確的時候很少)
寫入數據庫的時候用ADOQuery,用了事務處理,請教應該怎麼解決???
 
function TD.MyHostName:string;
var n:pchar;s:dword;ss:string;
begin
GetMem(n,32);
try
GetComputerName(n,s);
ss:=n;
Result:=ss;
finally
FreeMem(n,32);
end;
end;
 
to:yanghaijun
你所說的方法我也試過,也會出現這種情況
 
不用GetMem
SetLength(ss,200);
s:=Length(ss);
GetComputerName(pChar(ss),s);
ss:=Pchar(ss); //Fixup
Result:=ss;
 
procedure tfm_main.getmycomputername;
var
CNameBuffer : PChar;
fl_loaded : Boolean;
CLen : ^DWord;
varComputerName:string;
begin
GetMem(CNameBuffer,255);
New(CLen);
CLen^:= 255;
fl_loaded := GetComputerName(CNameBuffer,CLen^);
if fl_loaded then
varComputerName := StrPas(CNameBuffer)
else
varComputerName := 'Unkown';
FreeMem(CNameBuffer,255);
Dispose(CLen);

end;
varComputerName就是计算机名
 
受到樓上兩位的啟發
改為
function TD.myHostName: string;
var n:Pchar;
s:Dword;
begin
Result:='';
s:=256;
GetMem(n,s);
try
GetComputerName(n,s);
Result:=n;
finally
FreeMem(n,s);
end;
end;
可以實現

到這裡,一人給80
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1867427
 
procedure TForm1.Button1Click(Sender: TObject);
var ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char; // holds the name
Size:Dword; // holds the size
begin
Size := MAX_COMPUTERNAME_LENGTH+1;
GetComputerName(ComputerName,Size);
edit1.Text :=StrPas(Computername);
end;
 
后退
顶部