|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Desperate |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Всем привет!
Уже сломал всю голову, вопрос вот в чем, в DLL есть простейшая процедура procedure MyProc; var i:integer; begin for i:= 0 to 1000 do begin Sleep(10); end; end; В приложении вызываю процедуру и нужно каждую итерацию (i) отображать в TEdit. пробовал параметром передать procedure MyProc(out str:string); .... str:=inttostr(i); ... ругается. Как можно реализовать? Спасибо. |
|||
|
||||
Hiori |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
а передать в исполняемую процедуру собственно edit Вы не хотите?
аля
и потом вызывать подпихивая ей уже существующий на форме компонент
Это сообщение отредактировал(а) Hiori - 9.11.2018, 09:25 |
||||
|
|||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Если нужно передать число, то и передавай число. Зачем строку?
Если так уж нужно передавать именно текст, то используй PChar. У dll собственный менеджер памяти и гонять между dll и приложением сложные объекты - плохая затея. Нужно использовать примитивные или простые блоки данных. String, а тем более TEdit к ним не относится. Если так уж хочется гонять сложные объекты, то лучше использовать bpl, а не dll |
|||
|
||||
Desperate |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Snowy, я то не против, но задание данное мне гласит:
отображать каждое изменение (i) dll в TEdit на форме вызывающего приложения. Как передать в процедуру DLL это понятно. Как вернуть ИТОГОВЫЙ результат функции из DLL понятно. А вот как возвращать каждое приращение в Edit(аля Прогресс). Вот тут и проблемка возникла. Текстовый результат т.к. предположил по причине того что Edit.Text хавает только текст. Возможно есть вариант пробросить число с последующим его отображением в Edit? |
|||
|
||||
Snowy |
|
||||||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
То есть проблема в том, что тебе нужно из dll вызывать функцию в приложении?
Ну это можно сделать через callback или отправкой сообщений в основную форму. В приложении и dll описываешь колбэк:
В dll делаешь параметр типа колбэк:
Приложении реализуешь действия по колбэку:
|
||||||
|
|||||||
Desperate |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Ооо.
Похоже на истину. Вечерком попробую Спасибо. О таком варианте применения даже не подозревал. Верно понимаю такой подход (объявление в типе процедуры) называется CallBack'ом? |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Да. Callback - это функция для обратного вызова.
Как раз используется для реакций вызывающего на какие-либо действия. Посмотри в википедии там подробнее расписано. |
|||
|
||||
Desperate |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Благодарю. Уже нагуглил инфы. До этого не знал как правильно обозвать механизм и ничего толком найти не мог |
|||
|
||||
Desperate |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Блин, упирается в строчку MyProc(CallBackInt); Ошибка Incompatible types:"Calling conventions differ" |
||||
|
|||||
Desperate |
|
||||||||||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 11.10.2006 Репутация: нет Всего: -1 |
Все. Вопрос решен. Заработало По коду маааленькая правочка В приложении и dll описываешь колбэк:
И после этого делфя собрала проект. |
||||||||||
|
|||||||||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
of object нужен в том случае, если это не процедура, а метод объекта (формы).
Если он сам по себе, то не нужно. |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |