Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> события компоненты из DLL 
V
    Опции темы
SHKoder
Дата 14.8.2013, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



подскажите, пожалуйста. 
хочу сделать DLL и в ней обработчик одной из примученной компоненты.
хитрость вся в том, что методы этой компоненты живут отдельно от ее событий.

другими словами компонента общается с аппаратурой, которая дает отклик через некоторое время, (в зависимости от нагруженности) и методом Connect() я подключаюсь к ней, а в неком событии OnConnected(...) применяются параметры моей сессии, и мне нужно их передать обратно из DLL на вызываемое приложение. 
подскажите, пожалуйста, как это можно реализовать?

буду благодарен фрагментам кода.


не понимаю, что не так я сделал.
пожалуйста, подскажите, как сделать... опыта написания длл оберткой компоненты практически нет.
Код

library MyColler;

uses
  ShareMem,
  Forms, Dialogs,
  SysUtils,
  Classes,Windows, StdCtrls, uControl, Controls,
  ExtCtrls;

{$R *.res}

var
 OldApp, App : TApplication;
 myControl: TConector;


function Initialize(AppHandle: THandle) : Integer;  StdCall;
begin
  Application.Handle:=AppHandle;

   if not Assigned(OldApp) then
   begin
    OldApp := Application;
    Application.ProcessMessages;
    Application := App;
   end;



    myControl := TConector.Create(Application);
    with myControl do
    try
    OnDelivered := Delivered;

     OpenStream('SERVERLINKEDSTRING', 'USERID', 'PWD');
     MonitorDevice('0001');
     MakeCall('0001', '00002', 'Test coll);
     sleep(10000);
    finally
     CloseStream;
     Free;
    end;

Result := 1;
end;



procedure TConector.Delivered(Sender: TObject; connectionCallId: Integer);
begin
 showmessage(IntToStr(connectionCallId));
end;



exports Initialize;

begin
end.



компилятор ругается на строке 
OnDelivered := Delivered;

не задекларирована Delivered
далее ругается на переменную connectionCallId, тоже не задекларирована. но именно она возвращает мне значение из события компоненты.

другими словами, это монитор событий на телефоне.
вот и получается, что обратиться к DLL с инициированием подключения к аппарату, сделать не сложно. далее вызов с аппарата на другой телефон инициирует сессию, и ид этой сессии нужно вернуть на клиент. и событие это отрабатывает не моментально при вызове. более того, это событие Delivered, должно возвращать клиенту connectionCallId при входящем звонке извне, именно тогда, когда пользователь о фигне не думает, т.е. подключение к аппарату свершено, и более не происходит никаких вызовов.

уважаемые опытные, подскажите, пожалуйста, как завести это чудо. спасибо
PM MAIL   Вверх
Poseidon
Дата 14.8.2013, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(SHKoder @  14.8.2013,  10:13 Найти цитируемый пост)
не задекларирована Delivered
Ну тут вообще не понятно откуда у тебя такие вопросы, это же основы ООП. У тебя в конце кода реализация этого метода, а где его описание? Описание должно быть там, где описывается TConector, а не тут. Либо создавай наследника TConector и перекрывай Delivered уже тут, но все-равно описание должно быть уже у наследника.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SHKoder
Дата 14.8.2013, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



не Бог весть как, но кое как мне удалось реализовать задуманное. верней сказать первую половину.
да и не очень мне нравится способ. как-то корявенько выходит.


Код


library MyColler;

uses
  ShareMem,
  Forms, Dialogs,
  SysUtils,
  Classes,Windows, StdCtrls, uControl, Controls,
  ExtCtrls;

 type
TctConectorX = class(TPanelCtConector)

procedure Delivered(Sender: TObject; monitorCrossRefId,
  connectionCallId: Integer; connectionDevice, alertingDevice, callingDevice,
  calledDevice, lastRedirectionDevice: ShortString; localConnectionInfo, cause,
  deliveredType: Integer; trunkGroup, trunkMember, split, userInfo: ShortString;
  reason: Integer; distributingDevice, ucid: ShortString;
  flexibleBilling: Boolean);
end;
{$R *.res}

var
 OldApp, App : TApplication;
 ctConectorX : TctConectorX;
 ConCallId : Integer;

procedure TctConectorX.Delivered(Sender: TObject; monitorCrossRefId,
  connectionCallId: Integer; connectionDevice, alertingDevice, callingDevice,
  calledDevice, lastRedirectionDevice: ShortString; localConnectionInfo, cause,
  deliveredType: Integer; trunkGroup, trunkMember, split, userInfo: ShortString;
  reason: Integer; distributingDevice, ucid: ShortString;
  flexibleBilling: Boolean);
begin
 ConCallId := connectionCallId;
end;

function Initialize(AppHandle: THandle) : Integer;  StdCall;
begin

  Application.Handle:=AppHandle;

   if not Assigned(OldApp) then
   begin
    OldApp := Application;
    Application.ProcessMessages;
    Application := App;
   end;

    ctConectorX := TctConectorX.Create(Application);
    with ctConectorX do
     begin
     OnCSTADelivered := Delivered;

     OpenStream('SERVERLINKEDSTRING', 'USERID', 'PWD');
     MonitorDevice('0001');
     MakeCall('0001', '00002', 'Test coll);
     sleep(10000);
     end;
    Application.ProcessMessages;
    Result := ConCallId;
end;

exports Initialize;

begin
end.




теперь вопрос то более конкретный.
категорически не нравится 
sleep(10000);

и второе,
событие OnCSTADelivered может наступить без моего вмешательства.
т.е. к аппарату я подключился, монитор включил и сижу жду, когда мне кто-нить позвонит. тогда выполняется событие и ConCallId := connectionCallId; должен передаться в клиентское приложение. как вот это сделать???

спасибо
PM MAIL   Вверх
Illusion Dolphin
Дата 14.8.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

MakeCall('0001', '00002', 'Test coll);

А оно вообще компилируется? smile


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
SHKoder
Дата 15.8.2013, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Код

    with ctConectorX do
     begin
     OnCSTADelivered := Delivered;
     OpenStream('SERVERLINKEDSTRING', 'USERID', 'PWD');
     MonitorDevice('0001');
     MakeCall('0001', '00002', 'Test coll');
     end;


т.е. другие методы объекта Вас не смущают?
конечно компилируется. просто я опечатался в одном апострофе. думается мне это не критично для понимания сути.

Это сообщение отредактировал(а) Poseidon - 15.8.2013, 09:11
PM MAIL   Вверх
Illusion Dolphin
  Дата 15.8.2013, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

т.е. другие методы объекта Вас не смущают?

Нисколько. Сторонние методы без описания. 

Цитата

категорически не нравится 
sleep(10000);

Мне тоже - убирайте его smile Зачем оно вообще используется? 

Цитата

событие OnCSTADelivered может наступить без моего вмешательства.

Это хорошо или плохо? А как надо?
Цитата

т.е. к аппарату я подключился, монитор включил и сижу жду, когда мне кто-нить позвонит. тогда выполняется событие и ConCallId := connectionCallId; должен передаться в клиентское приложение. как вот это сделать???

Как сделать что? Передать что-то куда-то, вызвать OnCSTADelivered  без вашего участия?

P.S. Задавайте чёткие вопросы с чётким кодом, мне что-то вопрос в полной мере не понятен.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
SHKoder
Дата 16.8.2013, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



отбой, спасибо, все получилось на ловушках событий
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.