Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизКак pchar в string перевести Найти похожие ветки
← →
h_tray (2002-12-06 09:28) [0]В dll есть такая функция для определения лок имени компьютера
-------------------------------------
function gcn:pchar;
var
lpbuffer : array[0..max_computername_length] of char;
cd: dword;
begin
cd:=sizeof(lpbuffer);
GetComputerName(lpbuffer,cd);
result:=lpbuffer;
end;
-----------------------------------------------
В коде вызываю динамически эту функцию
procedure TForm1.Button1Click(Sender: TObject);
var
s:function:pchar;
libhandle:thandle;
name:pchar;
begin
@s:=nil;
libhandle:=LoadLibrary("test.dll");
if libhandle>=32 then begin
@s:=GetProcAddress(libhandle,"gcn");
if @s<>nil then begin
Label1.Caption:=name;// Вот сдесь то он херню а не имя компа end;
end;
freelibrary(libhandle);
end;
← →
Alx2 (2002-12-06 09:33) [1]>h_tray © (06.12.02 09:28)
function gcn(Buffer : pchar; MaxLen : Integer):pchar;
begin
GetComputerName(buffer,Maxlen);
result:=buffer;
end;
← →
cpp (2002-12-06 09:33) [2]А где вы переменной Name что-либо присваиваете?
← →
Alx2 (2002-12-06 09:35) [3]>cpp © (06.12.02 09:33)
Точно!
← →
perov (2002-12-06 09:42) [4]Label1.Caption := String(s);
← →
oomneeq (2002-12-06 11:55) [5]function gcn:pchar;
var
lpbuffer : array[0..max_computername_length] of char;
cd: dword;
begin
cd:=sizeof(lpbuffer);
GetComputerName(lpbuffer,cd);
result:=lpbuffer;//<---- Нехорошо это!
end;
PChar"овский result ссылается на локальный буфер
ой, нехорошо.
да и хэлп о том же:
-----------
A common error when working with PChars is to store in a data structure, or return as a value, a local variable. When your routine ends, the PChar will disappear because it is simply a pointer to memory, and is not a reference counted copy of the string. For example:
function title(n: Integer): PChar;
var
s: string;
begin
s := Format("title - %d", [n]);
Result := PChar(s); // DON"T DO THIS
end;
This example returns a pointer to string data that is freed when the title function returns.
← →
Alx2 (2002-12-06 13:20) [6]>oomneeq © (06.12.02 11:55)
уже проехали. см Alx2 © (06.12.02 09:33)
← →
oomneeq (2002-12-06 14:50) [7]C учетом
>Alx2 © (06.12.02 09:33)
можно конечно, проехать
но без учета
>oomneeq © (06.12.02 11:55)
можно можно снова тормознуться, хотя может и пронести -
как карта (память) ляжет !
но мы ведь программируем, а не в карты режемся :)
← →
alsha (2002-12-06 15:03) [8]function gcn: string;
varfunction gcn: string;
var
Len: cardinal;
begin
Len:=127;
SetLength(Result,Len);
GetComputerName(pchar(Result),Len);
SetLength(Result,Len);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:=gcn;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c