Методы Обатного вызова

Создание, использование компонентов ActiveX
SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Методы Обатного вызова

Сообщение SSecurity » 11.08.2004 (Ср) 1:18

Приветсвую Вас, уважаемые коллеги:)

У меня возник небольшой но крайне важный вопрос:
Как можно организовать вызов из DLL программы (уведомить программу что DLL выполнила задачу).
Всё что мне приходит на ум - поставит таймер и проверять у всех DLL значение State, в которое заранее сама DLL своё сосотояние пишет. Всё конечно хорошо, но сам клиент (ПО) будет получать от службы безопасности список разрешенных DLL, которые впоследствии могут быть запущены из клиентской программы, в связи с этим получается единый ДАТА ПУЛ, как у клиента так и у всех DLL. Но это уже мелочи.

Помогите плизз:) подскажите с организацией обратного вызова:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.08.2004 (Ср) 7:46

Организовать в DLL некий метод GetInstance (byval i as object), который будет вызывать приложение в начале работы с библой и через который оно даст библе указатель на себя, а библа его запомнит и потом будет юзать.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.08.2004 (Ср) 9:52

Чем Event-ы-то не подошли?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.08.2004 (Ср) 10:14

А что Длл работает в отдельном потоке?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.08.2004 (Ср) 10:27

Sebas писал(а):А что Длл работает в отдельном потоке?

Да нет, конечно. Не бывает так.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.08.2004 (Ср) 12:45

ну почему ж, а COM+ нафиг тады придумали?

Ну лана, я так понял имеется ввиду позднее связывание, так как набор библиотек незвестен.

Тут события не пригодятся, не проще просто выйти из вызова и всё? какой, нафиг, оповещение? Всё равно все калбэки будут ждать возврата из функции ДЛЛ.

Что то, наверное, мне проблема не понятна, так как я её не вижу))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 13:03

вообщем так, вооот схема
Изображение
если не читается .... смотрим на
http://www.aaa-rostov.narod.ru/00010.jpg



верно используется обратный вызов, одна прелесть у всех ДЛЛ информация передается посредством одного интерфейса.
или не мутить и сделать большую клиентскую сторону?
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.08.2004 (Ср) 13:25

Можно и при неизвестном наборе библиотек использовать раннее связывание, если объявить интерфейс, который они все должны имплементить.

А DLL, тем более написанная на не-thread-safe VB, в отдельном потоке работать не может ну никак.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 13:31

Вся суть проблемы заключается вот в чем,
сначала о проекте:

Запускается клиент;
В нем есть ссылка на компонент безопасности, компонент подкгружается (это мостик соединяющий клиента с данными)
в данном компоненте 3 класса:
- служба безопасности (работает с клиентом на предмет авторизации и выделения маркера доступа)
- доступ к базе данных безопасности (скрытый класс, доступен только из первого класса)
- доступ к общей базе (открытый класс), но ни один запрос до БД не проходит, если маркер службы безопасности не соответствует маркеру, предложенному клиентом при запросе.
Дабы осуществить воистину безопасный коннект с базой данных
запрос должжен проходить через компонент доступа, следовательно все запросы от клиента идут на него а потом просто передаются далее к БД и по цепочке обратно.
Все ДЛЛ-ки обращаются со своими запросами к Клиенту, клиент обращается к системе безопасности, система безопасности к БД, и резкультат запроса через значение RECORDSET передается по обратной цепочке, вызов на маршруте "клиент" - "система безопасности" это не проблема, а вот сам сбор инфы от DLL это бич программы.

Не могу организовать опрос ДЛЛ, здесь получается что ДЛЛ - это не библа с набором функций, а полнофункциональная программа с интерфейсом и набором функций.
Конечно, как вариант можно создать множество клиентов, но тогда каждому надо будет авторизовываться при запуске, а за это меня на работе съедят (хотя я и ухожу с работы, но всёже), при этом будет создано множество экземпляров компонентов доступа, что приведет увеличению количества подключений к БД, а это растранжирит ресурсы.
У меня даже мелькала идея ч/з винсок организовать связь, слава богу решил не эксперементировать в этой области, хотя кто знает:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 14:09

вот иная схема организации запроса, но клиентская ЕХЕ будет очень большой
Изображение
http://www.aaa-rostov.narod.ru/00011.jpg
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.08.2004 (Ср) 17:00

SSecurity писал(а):Вся суть проблемы заключается вот в чем,
...
это не проблема, а вот сам сбор инфы от DLL это бич программы.

Не могу организовать опрос ДЛЛ
...
У меня даже мелькала идея ч/з винсок организовать связь, слава богу решил не эксперементировать в этой области, хотя кто знает:)

Всё никак не пойму, чем Event-ы не подходят. DLL-компонент вызывает событие, клиент его обрабатывает. С событием передаются какие угодно данные. Что не так-то?

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 21:42

А не так то вот что .... в процессе обработки! ИХМО ... DLL может запросить данные и через час и через век, в зависимости от того в какой момент попросит клиент данные ... ДЛЛ - это полнофункциональная программа ... а некомпонент (конкретно в моем случае) .... т.е. ДЛЛ может запросить у клиента предстаить её данные скажем так из той таблицы по такому запросу ... причем ... всё модифицируется клиентом .... :) ДЛЛ с ПОЛЬЗОВАТЕЛЬСКИМ интерфейсом:) ...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 22:22

Хорошо, чтобы было понятнее:
Этап 1. Клиент - малюсенькая программа с динамически-изменяемым меню. При запуске этой программы вызывается DLL службы безопасности, она выводит встроенную форму для ввода пароля и логина, если всё пучком дается маркер, который может быть только один раз запрошен с ДЛЛки, после чего он удаляется, оставаясь только в переменной, значение которой стравнивается с маркером клиента.

Этап 2. Теперь клиент: представь мизерную программу Standart EXE!!!! получает ч/з запрос название серверов с которыми ему разрешено работать. Каждый такой сервер получает в своё распоряжение элемент меню, таким обрзом ЗВЕРЬ видит только у себя (образно) серенькое окошко с разными меню.

Этап 3.
ЗВЕРЬ выбрал из того, что ему дали и нажал на кнопочку меню - сработала процедура и запустила указанную ДЛЛ, как мы знаем ДЛЛ содержит ряд функций, которые могут облегчить/усложнить нам жизнь. Так вот, ДЛЛ показывает зверю своё рабочее окошко (ну например - Блокнот).

Этап 4.
ЗВЕРЬ выбрал всё что ему нравится .... и нажал кнопку "сохранить", теперь ДЛЛ должна обратиться к КЛИЕНТУ(клиент не является компонентом), а он - переадресовать запрос к СИСТЕМНОЙ ДЛЛ, а та в свою очередь внести изменения в БАЗЕ ДАННЫХ.


одним словом - СВЯЗЬ нужна:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.08.2004 (Ср) 23:24

В трёх словах - ты не въезжаешь.
Попробуй посмотреть сюда: "C:\Program Files\Microsoft Visual Studio\MSDN\2000OCT\1033\Samples\VB98\Coffee" и сопутствующую ему статью в MSDN: http://msdn.microsoft.com/library/en-us ... Coffee.asp
To understand what's going on in this sample, see "Building Code Components," in Creating ActiveX Components

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.08.2004 (Ср) 23:58

Могу тебя обрадывать .... Диска С у меня в помине нет :)
Спасибо почитаем .... рулит короче второй вариант без колбэков:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.08.2004 (Чт) 0:20

SSecurity писал(а):Могу тебя обрадывать .... Диска С у меня в помине нет :)

Это я, типа, посоветовал тебе на мой диск C посмотреть ;-)
Ладно, ладно, лишь бы помогло.


Вернуться в Компоненты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList