![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие из DLL в Main Application
cantalia © (2007-09-12 11:04:00)Как и где объявить функцию, которая происходила бы по нажатию кнопки в DLL(COM Server) и отдавала бы результат клиенту? Кнопка в DLL создаётся динамически.
Функция вида:
function SendAction(act:PChar):HResult; stdcall;
Объявил в DLL и в главном приложении, событие в DLL проходит, но в клиент не доходит.
den303_work (2007-09-12 14:54:00) [1]
> http://www.podgoretsky.com/ftp/Docs/Delphi/Tenser/2/index2.
> htm
Большое спасибо, изучаю. Вроде то, что нужно
Сергей М. (2007-09-12 14:37:00) [2]
> Дык это ж не COM!
Дык это ж как ответ на
> А если без COM, просто в библиотечке DLL?
> Я с COM дела не имел, а в ТЗ чётко сказано "СОМ-библиотеку"
> в справке примеров вообще нет
http://www.podgoretsky.com/ftp/Docs/Delphi/Tenser/2/index2.htm
den303_work (2007-09-12 14:14:00) [3]
> Решение в [4] чем не устроило ?
Дык это ж не COM! Или нормально? Я с COM дела не имел, а в ТЗ чётко сказано "СОМ-библиотеку".
Сергей М. (2007-09-12 14:07:00) [4]
> Есть ли другие, более простые способы реализации данной
> задачи
Решение в [4] чем не устроило ?
den303_work (2007-09-12 14:02:00) [5]К сожалению, времени изучать весь COM не осталось (впервые столкнулся), переписывать проект на ActiveForm не успеваю. Разобрался с коклассами, передачу параметров вdll решил. Осталось передать параметры изdll по событию OnClick на кнопке, расположенной (и в рантайм генерируемой!) на DLL-форме. Не могу додуматься, как генерировать события.
Предложенный Вами EventSink подходит, как я понял, тока для Automation/ActiveForm, либо я опять не пойму, как события объявлять.
Есть ли другие, более простые способы реализации данной задачи, чем дотошно изучить всё, что касается COM?
ЗЫ: Как назло, примеров вообще нет, в справке примеров вообще нет, примеры из поставки D7 совсем не из той области, а книги читать не успеваю....
ЗЫ2: Звиняйте за сумбур :o(
Сергей М. (2007-09-12 13:46:00) [6]см. справку на тему "Managing events in your Automation object"
den303_work (2007-09-12 13:43:00) [7]Подскажите, плз, как этот TAutoObject.EventSink объявить. В справке написано Property....
Сергей М. (2007-09-12 13:05:00) [8]
> Хоть один нормальный примерчик с TActiveForm
Ищи среди демо-проектов в составе Делфи, там точно есть.
> является ли ActiveForm (ocx) "внутрипроцессорной COM-библиотекой"
Явлется.
> Имхо, надо dll
ocx и есть dll
cantalia (2007-09-12 13:01:00) [9]И вообще, является ли ActiveForm (ocx) "внутрипроцессорной COM-библиотекой" (фраза из ТЗ). Имхо, надо dll...
den303_work (2007-09-12 12:57:00) [10]
> Сергей М. © (12.09.07 12:11) [6]
Хоть один нормальный примерчик с TActiveForm, плз! Все примеры, найденные мной, ипсользуют iExporer. А мне-то надо из приложения вызывать
Сергей М. (2007-09-12 12:11:00) [11]Проще всего плясать от TActiveForm (см. справку)
den303_work (2007-09-12 12:04:00) [12]
> Ты Шиву многоликий ?)
Ага ;o)
На другом форуме под первым ником сижу, вбил по привычке
> 1. Объявляешь тип колбэк-процедуры...
Пасиб, разобрался.
А вот с COM не очень. Есть ли какие простейшие примеры построения COM-объекта с возможностью пересылки сообщений туда-сюда? Весь Яндекс перерыл - ничего не нашёл... :o(
И вообще: надо построить inproc сервер, который строит дочернюю форму. Какой объект использовать? Automation? Или ComServ достаточно?
Сергей М. (2007-09-12 11:50:00) [13]
> Это я cantalia :o)
> Второй ник
>
Ты Шиву многоликий ?)
> А если без COM, просто в библиотечке DLL?
1. Объявляешь тип колбэк-процедуры
TEventHandler = procedure(Params: TSomeParams); stdcall;
2. Объявляешь и реализуешь экп.процедуру
procedure SetEventHandler(AHandler: TEventHandler); stdcall;
begin
ExternalHandler := AHandler; //ExternalHandler - переменная (или поле какого-либо подходящего объекта) типа TEventHandler
end;
3. В обработчике нажатия кнопки
if Assigned(@EventHandler) then
EventHandler(параметры обратного вызова)
den303_work (2007-09-12 11:36:00) [14]Это я cantalia :o)
Второй ник
den303_work (2007-09-12 11:35:00) [15]Спасибо.
А если без COM, просто в библиотечке DLL?
Сергей М. (2007-09-12 11:25:00) [16]см. стандартную справку к св-ву TAutoObject.EventSink