![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему StrLen(PChar(Str:string)) возвращает 0 ?
YeasU © (2004-11-03 13:28:00)И вообще, как узнать сколько места занимает структура на которую ссылается некоторый
pointer?
Reindeer Moss Eater (2004-11-03 14:19:00) [1]GetMem(PData,Size);
PData:=Data;
Гениально.
Reindeer Moss Eater (2004-11-03 14:16:00) [2]Ну и что из этого?
Если возвращает ноль, значит первый же байт, на который указывает PData имеет значение $00
YeasU (2004-11-03 14:13:00) [3]
> Reindeer Moss Eater © (03.11.04 14:02) [6]
Ну ладно издеваться то...
Или мне надо сделать так =>
procedure TForm1.COMPacket(Sender: TObject; Data: Pointer;
Size: Integer);
var
PBuffer:PChar;
begin
PBuffer:=Data;
ConvD(PBuffer, Size,clRed);
end;
Procedure ConvD(Data:PChar; Size;Color:TColor);
var
PData:PChar;
begin
...
GetMem(PData, Size);
PData:=Data;
PLen:=StrLen(PData);
...
FreeMem(PData);
...
end;
Хотя по-моему это что то не то...
Reindeer Moss Eater (2004-11-03 14:02:00) [4]Что почему?
Почему не врет или почему ноль?
YeasU (2004-11-03 13:59:00) [5]
> Reindeer Moss Eater © (03.11.04 13:55) [4]
Я почему то не думал, что он мне будет врать ;)
Почему?
Reindeer Moss Eater (2004-11-03 13:55:00) [6]Правду говорит
YeasU (2004-11-03 13:49:00) [7]
procedure TForm1.COMPacket(Sender: TObject; Data: Pointer;
Size: Integer);
var
PBuffer:PChar;
begin
PBuffer:=Data;
ConvD(PBuffer,clRed);
end;
И если вprocedure ConvDделатьStrLen(PBuffer:PChar)то говорит, что 0...
Rem (2004-11-03 13:38:00) [8]Менеджер памяти должен об этом знать.
GetMem(p, size);
...
FreeMem(p); // тут же происходит корректноеудаление, хоть размер и не указан
begin...end (2004-11-03 13:33:00) [9]
> как узнать сколько места занимает структура на которую ссылается
> некоторый pointer
Если есть просто нетипизированный указатель, и ничего больше не известно, то - никак.