Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.45 MB
Время: 0.007 c
3-51650
Cranium
2002-11-28 19:53
2002.12.16
IBStoredProc ругается на парметр


1-51699
avsh
2002-12-05 20:44
2002.12.16
TImage


14-51899
Dave2000
2002-11-22 12:06
2002.12.16
Как отправить e-mail НЕ через компоненты Дельфи?


6-51852
ULTRIX
2002-10-10 22:01
2002.12.16
Получение ресурсов к папке


1-51755
Berg
2002-12-04 15:51
2002.12.16
Не запускается HELP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский