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

Вниз

Pointer   Найти похожие ветки 

 
Gu   (2011-12-29 18:28) [0]

Есть Procedure My(p:Pointer); в нее приходят значения pchar и pansichar. в процедуре можно как то узнать, какой тип указателя пришел? что то типа if (p is pchar) then;


 
~AQUARIUS~   (2011-12-29 18:48) [1]

Нет, нельзя. Предусмотрите либо две версии функции (MyA(PAnsiChar) и MyW(PWideChar)), либо дополнительный параметр для идентификации типа строки. ИМХО первый вариант лучше


 
Gu   (2011-12-29 18:49) [2]

спасибо


 
Юрий Зотов ©   (2011-12-29 20:06) [3]

Прямого способа нет, но, может быть, вот этот косвенный натолкнет на какие-то мысли. Идея в том, что по смещению -SizeOf(PInteger) от первого символа строки хранится ее размер в байтах. Если он равен длине строки, то это AnsiString, а если вдвое больше - то WideString.

const
 AStr: AnsiString = "AnsiString";
 WStr: WideString = "WideString";

var
 PAStr: PAnsiChar;
 PWStr: PWideChar;
 PSize: PInteger;

procedure TForm1.Button1Click(Sender: TObject);
begin
 PAStr := @AStr[1];
 PSize := PInteger(Cardinal(PAStr) - SizeOf(PInteger));
 ShowMessage(Format("%d %d", [Length(AStr), PSize^]))
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 PWStr := @WStr[1];
 PSize := PInteger(Cardinal(PWStr) - SizeOf(PInteger));
 ShowMessage(Format("%d %d", [Length(WStr), PSize^]))
end;


 
Dimka Maslov ©   (2011-12-29 20:25) [4]


> Юрий Зотов ©   (29.12.11 20:06) [3]


Речь идёт о PChar и PAnsiChar. А они принципиально неразличимы, как и любые указатели.


 
Юрий Зотов ©   (2011-12-29 20:33) [5]


> Dimka Maslov ©   (29.12.11 20:25) [4]

Указатели на однобайтовые строки и различать не надо, поскольку это одно и то же. Поэтому я склонен думать, что речь идет о различении указателей на однобайтовую и двубайтовую строки, а автор просто неточно сформулировал вопрос.


 
Gu   (2011-12-29 20:56) [6]


> на однобайтовую и двубайтовую строки


угу


 
Dimka Maslov ©   (2011-12-29 21:26) [7]

Проще и надёжнее сделать две функции, чем строить какие-то догадки по составу данных.


 
Anatoly Podgoretsky ©   (2011-12-29 22:08) [8]

> Dimka Maslov  (29.12.2011 21:26:07)  [7]

А нам не страшно голову сломать.


 
Юрий Зотов ©   (2011-12-29 22:40) [9]


> Dimka Maslov ©   (29.12.11 21:26) [7]

Безусловно, и проще, и надежнее, и правильнее. Просто сама задачка показалась довольно интересной.



Страницы: 1 вся ветка

Текущий архив: 2012.04.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1324457180
Mysql_error
2011-12-21 12:46
2012.04.22
Настроить коннет к mysql с разных компьютеров


2-1324926935
Kilowatt
2011-12-26 23:15
2012.04.22
Не получается загружать картинки формата PNG в ImageList. D 2009


15-1323969847
Jeer
2011-12-15 21:24
2012.04.22
Гениальные сподвижники IT


15-1324413003
Юрий
2011-12-21 00:30
2012.04.22
С днем рождения ! 21 декабря 2011 среда


15-1324204018
oldman
2011-12-18 14:26
2012.04.22
Не хватает снега?