| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > указатель на строку |
| Автор: bagos 2.2.2009, 14:53 |
| ловлю сообщение procedure TForm1.handlenewdata(var message: TMessage); var data: ^string; begin Integer(@data) := message.wparam; lst1.Items.Add(string(data)); end; код неправильный, с указателями траблы:( что не так? ткните носом! |
| Автор: SneG0K 2.2.2009, 15:10 |
| А в чем именно проявляется ошибка? В Delphi7 я заметил, что integer криво преобразовывает. И ты пытаешся в указатель на string запихнуть integer |
| Автор: Rrader 2.2.2009, 15:12 |
| Все неверно - память для строки не выделена, информации о символах (содержимом) нет (на их месте мусор). Фактически ты передаешь одно число, а надо массив. А для этого уже следует использовать помощь Windows Строки можно передавать через WM_COPYDATA. P.S. Забыл сказать, это касается IPC. Для своего процесса все попроще |
| Автор: Alexeis 2.2.2009, 15:17 |
| data - это сам по себе указатель на указатель (строка это указатель). А операция взятия адреса даст указатель на указатель на указатель |
| Автор: marinovsoft 2.2.2009, 15:21 | ||
| Зачем такой запутанный код? Может лучше так
Удачи |
| Автор: Alexeis 2.2.2009, 15:36 |
| marinovsoft, и что? В строку запишется значение адреса bagos, чтобы ответить на вопрос как принять строку нужно сначала увидеть как ее туда заносили в параметр wparam |
| Автор: Frees 2.2.2009, 15:38 | ||
глупость помоему
но тут надо смотреть как ты в Message1.WParam засовываеш строку |
| Автор: marinovsoft 2.2.2009, 17:19 | ||||
В wParam лежит адрес строки??? Я не телепат. Мало ли кто что "накодил" тогда
|
| Автор: bagos 2.2.2009, 18:39 | ||
| Никак еще не заносил, мне то как раз и надо все это сделать, занести указатель на строку в wparam, и потом прочитать строку. Спасибо ответившим! Добавлено через 14 минут и 57 секунд заношу вот так:
|
| Автор: bagos 2.2.2009, 18:59 |
| data:=inttostr(Message.WParam); выдает все нули может заношу неправильно? |
| Автор: bagos 2.2.2009, 19:14 |
| var data: PChar; begin data := PChar(Pointer(message.LParam)^); lst1.Items.Add(data) заработало))) |
| Автор: marinovsoft 2.2.2009, 19:26 | ||
Немного поздновато, но все же...
|
| Автор: bagos 2.2.2009, 20:48 | ||
| Спасибо! Это лучше Добавлено через 11 минут и 3 секунды А как быть в записями? создаю запись
как в этом случае послать через указатель запись? |
| Автор: bagos 2.2.2009, 21:24 | ||
пытаюсь так:
|
| Автор: MetalFan 2.2.2009, 22:27 |
| автор пытается передать данные внутри своего приложения или между приложениями? если внутри - то последовательность такая: выделил память, заполнил данными, отослал указатель. принял указатель, прочитал данные, освободил память. это общий случай. в данных муках с записью сделано несколько ошибок. неправильное приведение типа, и Dispose непонятно на что. Добавлено через 1 минуту и 7 секунд кстати, marinovsoft привел некрасивый пример, использование которого в общем случае может привести к AV или порче данных. |
| Автор: bagos 2.2.2009, 23:42 |
| MetalFan, пример некрасивый потому что не выделяется память под указатель? Добавлено через 11 минут и 6 секунд чем тогда заменить Dispose, и почему он не подходит? |
| Автор: bagos 3.2.2009, 05:04 | ||
Вот что получилось)) |
| Автор: MetalFan 3.2.2009, 13:11 |
| bagos, в твоем примере тоже есть недочет. неправильно используется конструкция try..finally. кстати, в случае использования SendMessage память можно выделять и освобождать в одном месте. |
| Автор: bagos 3.2.2009, 20:46 |
| В чем заключается неверность использования try ...finally? SendMessage посылается из рабочего треда, а messagehandler принимает в мэйнтреде |
| Автор: bagos 4.2.2009, 01:52 | ||||
| Сейчас делаю по другому: Мэйн тред:
раб. тред:
почему то возвращает пустые строчки? что делаю не так? |
| Автор: THandle 4.2.2009, 10:33 |
| bagos, что за List то хоть? И выложи что ли полный пример. Мне лично из этих огрызков не все понятно) |
| Автор: bagos 4.2.2009, 11:08 |
| разобрался, не выделял память |