Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PChar:=String [D6]


Страницы:   1 2 3

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 вкупе с Флёновыми развращает. Не учит пониманию простых вещей.
Точнее, не простых, а основополагающих.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо