Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
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


3-1274956779
Николай2010
2010-05-27 14:39
2012.04.22
Access+Delphi+Ado - про транзакции


15-1323982683
Германн
2011-12-16 00:58
2012.04.22
Странный глюк с поисковыми запросами.


15-1324276198
brother(home)
2011-12-19 10:29
2012.04.22
HTML Table + CSS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский