Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача в процедуру адреса строки / 11 сообщений из 11, страница 1 из 1
02.12.2017, 19:22:04
    #39563068
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Здравствуйте,

Мне нужно передать в процедуру не строку string, а указатель на нее.
Я знаю, что можно передать параметр как var, но мне надо по-другому.

Я сделал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Type
  PtrString = ^string;

procedure TForm1.Button1Click(Sender: TObject);
var st:string;
begin
  st:='Bonjour';
  SetStr(@st);
  ShowMessage(st); // здесь выдало 'Привет по-русски'
end;

Procedure SetStr(pSt: PtrString);
begin
  pSt^:='Привет по-русски';
end;


Вроде работает все прекрасно, но на всякий случай хочу уточнить, нет ли здесь "подводных камней", может надо где-то под указатель память выделить или еще что-то?

Возможно, я все правильно сделал и проблем не в будущим не возникнет.

В любом случае мнение экспертов по поводу данного кода мне не помешает.
...
Рейтинг: 0 / 0
02.12.2017, 19:54:32
    #39563075
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
m52, все ок, но лучше использовать стандартный тип PString
...
Рейтинг: 0 / 0
02.12.2017, 20:52:19
    #39563095
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Любит наш народ любовно раскладывать грабли на своем пути... Потом выясниться, что где-нить счетчик ссылок облажается...
...
Рейтинг: 0 / 0
02.12.2017, 22:57:40
    #39563144
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
m52Я знаю, что можно передать параметр как var, но мне надо по-другому.Можете рассказать почему?
...
Рейтинг: 0 / 0
03.12.2017, 06:17:21
    #39563207
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.
...
Рейтинг: 0 / 0
03.12.2017, 07:52:34
    #39563208
Кар-Кар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Остается лишь учесть, что потоки не сразу запускаются так что указатель должен быть "бессмертным". GetMem, AllocMem и прочие в куче, а не на стеке.
...
Рейтинг: 0 / 0
03.12.2017, 07:55:18
    #39563209
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Если уж страдать такой хренью, почему не сделать тупо глобальный string без всяких поинреров?
...
Рейтинг: 0 / 0
03.12.2017, 08:49:38
    #39563215
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
m52Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.

Совершенно не ясно, что именно в описанном сценарии мешает передавать строку. Никто не мешает передавать в потом строку и запоминать её в переменных потока.
...
Рейтинг: 0 / 0
03.12.2017, 12:59:32
    #39563243
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
m52Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.
Вы же понимаете, что после этого к этой строке в потоке можно будет обращаться только через синхронизацию?.. :)
...
Рейтинг: 0 / 0
03.12.2017, 14:15:45
    #39563261
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
GunSmoker,

+1
...
Рейтинг: 0 / 0
03.12.2017, 14:35:05
    #39563270
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача в процедуру адреса строки
Такое ощущение, что ТС пытается передать адрес, куда он запишет результаты работы потока
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача в процедуру адреса строки / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]