Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Передача в процедуру адреса строки  [new]
m52
Member

Откуда:
Сообщений: 694
Здравствуйте,

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

Я сделал так:
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;

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

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

В любом случае мнение экспертов по поводу данного кода мне не помешает.
2 дек 17, 19:22    [21000992]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
fd00ch
Member

Откуда: Нижний Новгород
Сообщений: 5864
m52, все ок, но лучше использовать стандартный тип PString
2 дек 17, 19:54    [21001069]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1628
Любит наш народ любовно раскладывать грабли на своем пути... Потом выясниться, что где-нить счетчик ссылок облажается...
2 дек 17, 20:52    [21001198]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
m52
Я знаю, что можно передать параметр как var, но мне надо по-другому.
Можете рассказать почему?
2 дек 17, 22:57    [21001423]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
m52
Member

Откуда:
Сообщений: 694
Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.
3 дек 17, 06:17    [21001798]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
Кар-Кар
Guest
Остается лишь учесть, что потоки не сразу запускаются так что указатель должен быть "бессмертным". GetMem, AllocMem и прочие в куче, а не на стеке.
3 дек 17, 07:52    [21001819]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
rgreat
Member

Откуда:
Сообщений: 3746
Если уж страдать такой хренью, почему не сделать тупо глобальный string без всяких поинреров?
3 дек 17, 07:55    [21001823]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
GunSmoker
Member

Откуда:
Сообщений: 2935
m52
Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.


Совершенно не ясно, что именно в описанном сценарии мешает передавать строку. Никто не мешает передавать в потом строку и запоминать её в переменных потока.
3 дек 17, 08:49    [21001842]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
alekcvp
Member

Откуда:
Сообщений: 521
m52
Потому, что передать надо адрес переменной в не в процедуру, а в Thread и запомнить там в локальную переменную в области Private.

Вы же понимаете, что после этого к этой строке в потоке можно будет обращаться только через синхронизацию?.. :)
3 дек 17, 12:59    [21002022]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
Док
Member

Откуда: Казань
Сообщений: 5231
GunSmoker,

+1
3 дек 17, 14:15    [21002129]     Ответить | Цитировать Сообщить модератору
 Re: Передача в процедуру адреса строки  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
Такое ощущение, что ТС пытается передать адрес, куда он запишет результаты работы потока
3 дек 17, 14:35    [21002166]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить