Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Событие из DLL в Main Application   Найти похожие ветки 

 
cantalia   (2007-09-12 11:04) [0]

Как и где объявить функцию, которая происходила бы по нажатию кнопки в DLL(COM Server) и отдавала бы результат клиенту? Кнопка в DLL создаётся динамически.

Функция вида:
function SendAction(act:PChar):HResult; stdcall;
Объявил в DLL и в главном приложении, событие в DLL проходит, но в клиент не доходит.


 
Сергей М. ©   (2007-09-12 11:25) [1]

см. стандартную справку к св-ву TAutoObject.EventSink


 
den303_work ©   (2007-09-12 11:35) [2]

Спасибо.
А если без COM, просто в библиотечке DLL?


 
den303_work ©   (2007-09-12 11:36) [3]

Это я cantalia :o)
Второй ник


 
Сергей М. ©   (2007-09-12 11:50) [4]


> Это я 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 12:04) [5]


> Ты Шиву многоликий ?)

Ага ;o)
На другом форуме под первым ником сижу, вбил по привычке


> 1. Объявляешь тип колбэк-процедуры...

Пасиб, разобрался.

А вот с COM не очень. Есть ли какие простейшие примеры построения COM-объекта с возможностью пересылки сообщений туда-сюда? Весь Яндекс перерыл - ничего не нашёл... :o(

И вообще: надо построить inproc сервер, который строит дочернюю форму. Какой объект использовать? Automation? Или ComServ достаточно?


 
Сергей М. ©   (2007-09-12 12:11) [6]

Проще всего плясать от TActiveForm (см. справку)


 
den303_work ©   (2007-09-12 12:57) [7]


> Сергей М. ©   (12.09.07 12:11) [6]

Хоть один нормальный примерчик с TActiveForm, плз! Все примеры, найденные мной, ипсользуют iExporer. А мне-то надо из приложения вызывать


 
cantalia   (2007-09-12 13:01) [8]

И вообще, является ли ActiveForm (ocx) "внутрипроцессорной COM-библиотекой" (фраза из ТЗ). Имхо, надо dll...


 
Сергей М. ©   (2007-09-12 13:05) [9]


> Хоть один нормальный примерчик с TActiveForm


Ищи среди демо-проектов в составе Делфи, там точно есть.


> является ли ActiveForm (ocx) "внутрипроцессорной COM-библиотекой"


Явлется.


> Имхо, надо dll


ocx и есть dll


 
den303_work ©   (2007-09-12 13:43) [10]

Подскажите, плз, как этот TAutoObject.EventSink объявить. В справке написано Property....


 
Сергей М. ©   (2007-09-12 13:46) [11]

см. справку на тему "Managing events in your Automation object"


 
den303_work ©   (2007-09-12 14:02) [12]

К сожалению, времени изучать весь COM не осталось (впервые столкнулся), переписывать проект на ActiveForm не успеваю. Разобрался с коклассами, передачу параметров в dll решил. Осталось передать параметры из dll по событию OnClick на кнопке, расположенной (и в рантайм генерируемой!) на DLL-форме. Не могу додуматься, как генерировать события.
Предложенный Вами EventSink подходит, как я понял, тока для Automation/ActiveForm, либо я опять не пойму, как события объявлять.
Есть ли другие, более простые способы реализации данной задачи, чем дотошно изучить всё, что касается COM?

ЗЫ: Как назло, примеров вообще нет, в справке примеров вообще нет, примеры из поставки D7 совсем не из той области, а книги читать не успеваю....

ЗЫ2: Звиняйте за сумбур :o(


 
Сергей М. ©   (2007-09-12 14:07) [13]


> Есть ли другие, более простые способы реализации данной
> задачи


Решение в [4] чем не устроило ?


 
den303_work ©   (2007-09-12 14:14) [14]


> Решение в [4] чем не устроило ?

Дык это ж не COM! Или нормально? Я с COM дела не имел, а в ТЗ чётко сказано "СОМ-библиотеку".


 
Сергей М. ©   (2007-09-12 14:37) [15]


> Дык это ж не COM!


Дык это ж как ответ на


> А если без COM, просто в библиотечке DLL?



> Я с COM дела не имел, а в ТЗ чётко сказано "СОМ-библиотеку"


> в справке примеров вообще нет


http://www.podgoretsky.com/ftp/Docs/Delphi/Tenser/2/index2.htm


 
den303_work ©   (2007-09-12 14:54) [16]


> http://www.podgoretsky.com/ftp/Docs/Delphi/Tenser/2/index2.
> htm

Большое спасибо, изучаю. Вроде то, что нужно



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
15-1193675346
ББС
2007-10-29 19:29
2007.12.02
Би-би-си: Боитесь ли вы усиления России? Письма со всего мира


2-1194343616
Sergl
2007-11-06 13:06
2007.12.02
Номер коннекта в сокетах


8-1170238744
Alek_1
2007-01-31 13:19
2007.12.02
делаем видео происходящего на экране


2-1194603858
alsov
2007-11-09 13:24
2007.12.02
Почему StrToFloat обрезает строку?


2-1194353830
Azize
2007-11-06 15:57
2007.12.02
перевод из Двоичного кода