Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.16;
Скачать: CL | DM;

Вниз

Как 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
4-51994
the7guest
2002-11-02 17:34
2002.12.16
Как подключить и использовать WinAPI ??? 8~


4-52015
Lexa1900
2002-11-02 23:40
2002.12.16
Можно ли как-то сохранять все полученные hwnd?


1-51827
Tundra
2002-12-05 14:17
2002.12.16
Нужно в StringGrid организовать CheckBox


4-52001
Lexa1900
2002-11-03 23:29
2002.12.16
Как получить hwnd активного окна?


3-51651
cypher
2002-11-27 00:17
2002.12.16
BDE-ODBC