Главная страница
    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.063 c
15-1193912002
TIF
2007-11-01 13:13
2007.12.02
Где скачать книгу? Желательно главу 6 (pdf)


2-1194335684
leonidus
2007-11-06 10:54
2007.12.02
Отображение прогресса при LoadFromFile и SaveToFile


15-1193753952
Sirakuz
2007-10-30 17:19
2007.12.02
[REQ] Fast Report 2.5


2-1194434383
dumka
2007-11-07 14:19
2007.12.02
Поиск


8-1169895913
IMHO
2007-01-27 14:05
2007.12.02
Remove red eyes





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский