![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PChar:=String [D6]
GTAID © (2006-08-17 20:07:00)Как присвоить String к PChar?
Хелп!
Как сделать в обратную сторону я знаю: String:=StrPas(PChar)
begin...end (2006-08-18 18:53:00) [21]> Loginov Dmitry © (18.08.06 18:49) [30]
Проверил. Не удивился. Как я и ожидал, при выполнении указанного присваивания выделения памяти не происходит. Что я делаю не так?
Ega23 (2006-08-18 18:50:00) [22]
> Если бы не забивал мозги извращениями типа PVariant^, то
> может ты бы понял, что в БОЛЬШИНСТВЕ Api-вызовов как раз
> "простое преобразование" и требуется
Между прочим, посмотрев на остальные подобные функции, пришёл к выводу, что передачей значения через var-параметр там не обойтись.
Так что - мимо тазика, любезный.
Loginov Dmitry (2006-08-18 18:49:00) [23]> Что за чушь?
Проверь. Удивишься!
begin...end (2006-08-18 18:46:00) [24]> DevilDevil © (18.08.06 16:19) [15]
А можно пояснить, кого, например, я обкакал в посте [5]? Аж интересно.
> Loginov Dmitry © (18.08.06 18:33) [26]
> Хе... Автоматически выделяется память и в нее копируется
> содержимое Text.
Что за чушь?
Loginov Dmitry (2006-08-18 18:43:00) [25]За одно проверил, что если строка передается так
procedure ShowError(Text : string);
то происходит предварительно создание копии данной строки.
Поэтому директирой const пренебрегать не следует.
Loginov Dmitry (2006-08-18 18:37:00) [26]Причем, если будет так
procedure ShowError( constText : string);
то копирования не будет, а присвоится только указатель, как и ожидалось.
Loginov Dmitry (2006-08-18 18:33:00) [27]> Mes := pchar(Text);
Хе... Автоматически выделяется память и в нее копируется содержимое Text.
А зачем так сделали, не ясно. Вдруг я хочу в Mes просто запомнить указатель на данные строки Text.
Сколько же еще фичей зашито в PChar?
Ketmar (2006-08-18 18:24:00) [28]> [22] DevilDevil © (18.08.06 17:24)
если автор "не думал", то это только его проблемы. авось в дальнейшем будет сначала думать.
DevilDevil (2006-08-18 17:33:00) [29]> MBo © (18.08.06 17:27) [23]
Единствеенный рулёзный человек!
MBo (2006-08-18 17:27:00) [30]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1206
DevilDevil (2006-08-18 17:24:00) [31]> Loginov Dmitry © (18.08.06 17:09) [21]
procedure ShowError(Text : string);
var
Mes : pchar;
begin
Mes := pchar(Text);
MessageBox(GetActiveWindow, Mes, 'Error:', MB_ICONERROR)
end;
Дело в том что автор топика скорее всего только начал изучать Дельфи; он даже вопрос грамотно задать не смог. Да и не удивительно: он же и не думал, что с преобразованиями pchar <--> string может быть столько мороки
> Ega23 © (18.08.06 16:54) [20]
Если бы не забивал мозги извращениями типа PVariant^, то может ты бы понял, что в БОЛЬШИНСТВЕ Api-вызовов как раз " простое преобразование" и требуется
P.S. нет, ну привяжутся же к ерунде, вместо того чтобы реально человеку советом помочь. Вот дотошные...
Loginov Dmitry (2006-08-18 17:09:00) [32]> например в такой ситуации:
>
> procedure ShowError(Text : string);
> begin
> MessageBox(GetActiveWindow, pchar(Text), 'Error:', MB_ICONERROR)
> ;
> end;
Это совершенно иная ситуация. Тут нет никакого присваивания String к PChar. Здесь просто-напросто приведение типов.
Ega23 (2006-08-18 16:54:00) [33]
> DevilDevil © (18.08.06 16:45) [19]
Если бы внимательно почитал "неинформативные посты", то ты бы понял, что простое преобразование прокатывает далеко не всегда.
DevilDevil (2006-08-18 16:45:00) [34]> иначе, зачем нужны такие пляски
например в такой ситуации:
procedure ShowError(Text : string);
begin
MessageBox(GetActiveWindow, pchar(Text), 'Error:', MB_ICONERROR);
end;
Loginov Dmitry (2006-08-18 16:40:00) [35]> Как присвоить String к PChar?
Полагаю, что уже имеется готовый буфер для копирования в него строки (иначе, зачем нужны такие пляски), причем буфер находится в другом модуле, подгруженном в одно адресное пространство с вашей программой. Известна также длина этого буфера. Тогда можно так сделать:
Len := Min(S, BufSize - 1);
Move(S[1], PCharBuf^, Len);
PCharBuf[Len] := #0;
DevilDevil (2006-08-18 16:30:00) [36]Вы вместо флуда, объяснили бы сами человеку, какие трудности следует ожидать, что за "звери" такие: pchar и string. А то целых 15 неинформативных постов...
Ega23 (2006-08-18 16:23:00) [37]
> Прямо обкакали, можно сказать.
Не совсем. Обкакывается иначе. Как - могу объяснить по мылу. Нефиг форум засорять физиологическими подробностями функционирования человеческого организма.
DevilDevil (2006-08-18 16:19:00) [38]> [3]-[14]
Прямо обкакали, можно сказать.
Ketmar (2006-08-18 13:01:00) [39]> [13] Ega23 © (18.08.06 12:41)
хм. а Delphi и не обязана ничему учить... %-)
Ega23 (2006-08-18 12:41:00) [40]
> это не "вред Delphi", это вред лени. %-)
Просто Delphi вкупе с Флёновыми развращает. Не учит пониманию простых вещей.
Точнее, не простых, а основополагающих.