Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

Событие из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.031 c
6-1175247082
Wolchonok29
2007-03-30 13:31
2007.12.02
Передача потока


15-1194092585
Kostafey
2007-11-03 15:23
2007.12.02
NOOOXML


15-1193574821
DeadMeat
2007-10-28 15:33
2007.12.02
Опять про *.bpl


2-1194237848
Masher
2007-11-05 07:44
2007.12.02
Консольный калькулятор


15-1193703706
DimonS
2007-10-30 03:21
2007.12.02
PowerPack 2.47





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский