Форум: "Начинающим";
Текущий архив: 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