Прямой доступ к функциям сервиса/службы
От: NightStalker  
Дата: 10.06.03 09:12
Оценка:
Привет всем.

Крайне интересует следующий вопрос:

Необходимо для Виндовс 2000 написать некоторый модуль, который будет висеть в памяти, выполнять какие-то свои действия и предоставлять некоторые свои функции для вызова сторонними приложениями. Так же необходимо, чтобы эти самые сторонние приложения получали доступ к функциям этого модуля путём простого включения файла заголовков ( с описанием функций ) в проект. Т.е. никакой дополнительной линковки библиотек, относящихся к загруженному модулю, или дополнительного кода в самом приложении.

Вопроса в общем то два — можно ли это сделать и, если можно, то как?

1. Использование DLL не подходит по причине необходимости линковки с дополнительной библиотекой ( при неявной загрузке DLL ) или же по причине добавления в исходники приложения дополнительного кода для явной загрузки DLL.

2. Оптимальным вроде бы является написание сервиса/службы, но я никак не могу найти информации о том, как сделать прямой доступ к их функциям...

Заранее благодарю за ответы.

P.S. Наверное можно ещё оформить этот модуль в виде драйвера... но хотелось бы всё таки пойти по второму пути если это возможно.
Re: А использовать COM для доступа нельзя?
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 10.06.03 09:47
Оценка:
*
Re: Прямой доступ к функциям сервиса/службы
От: Блудов Павел Россия  
Дата: 10.06.03 10:17
Оценка:
Здравствуйте, NightStalker, Вы писали:

NS>Необходимо для Виндовс 2000 написать некоторый модуль, который будет висеть в памяти, выполнять какие-то свои действия и предоставлять некоторые свои функции для вызова сторонними приложениями. Так же необходимо, чтобы эти самые сторонние приложения получали доступ к функциям этого модуля путём простого включения файла заголовков ( с описанием функций ) в проект. Т.е. никакой дополнительной линковки библиотек, относящихся к загруженному модулю, или дополнительного кода в самом приложении.


Сделайте COM-сервис в виде службы.
Павел.
Re[2]: Прямой доступ к функциям сервиса/службы
От: NightStalker  
Дата: 10.06.03 10:38
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Сделайте COM-сервис в виде службы.


Вполне возможный вариант. Правда я практически не писал СОМ-сервисы, но насколько я знаю ( очень даже может быть, что я ошибаюсь ), для использования функций СОМ-сервиса, в приложении придётся произвести какие-то дополнительные действия...
А хотелось бы придти к такой ситуации, что я в приложении только подключаю .H файл и могу вызывать функции сервиса без каких-то дополнительных действий. Вполне возможно, что сервис для этого будет необходимо каким-то хитрым способом зарегистрировать в системе...

Т.е. к предидущим вопросам добавляется ещё один — нужно ли для использования функций СОМ-сервиса что-то дописывать в приложение его вызывающее?

Александр.
Re: Прямой доступ к функциям сервиса/службы
От: BOPOH_N Россия  
Дата: 10.06.03 11:37
Оценка:
Насколько я понял хочется использовать функциональность некоторого модуля не привязываясь к нему. Вообще-то это классическая архитектура клиент-сервер. В твоем случае служба должна выступать в роли сервера. Т.е клиентское приложение должно слать запрос (код ф-ии и параметры), а сервер возвращать ответ (результат выполнения). Правда в такой схеме вся сложность в том что ф-ии сервера исполняются в его контексте и передача данных от клиента серверу и обратно не совсем тривиальна. Если все ф-ии сервера можно представить в виде:
DWORD Fun(DWORD arg), то все очень просто: Клиент шлет серверу мессагу с помощью PostThreadMessage( serverId, dwFunCode, clientId, arg), служба должна его отработать и в ответ выслать результат PostThreadMessage( clientId, dwFunCode, resFun, 0).

На самом деле можно использовать любой метод межпроцессорного взаимодействия, который покажется тебе более удобным.
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Прямой доступ к функциям сервиса/службы
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 10.06.03 11:50
Оценка:
Здравствуйте, NightStalker, Вы писали:

[]

NS>2. Оптимальным вроде бы является написание сервиса/службы, но я никак не могу найти информации о том, как сделать прямой доступ к их функциям...


Это другой процесс. Как ты можешь вызывать его функции напрямую?
Что значит "прямой доступ"?

[]
Re[3]: Прямой доступ к функциям сервиса/службы
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 10.06.03 11:51
Оценка:
Здравствуйте, NightStalker, Вы писали:


NS>Вполне возможный вариант. Правда я практически не писал СОМ-сервисы, но насколько я NS>знаю ( очень даже может быть, что я ошибаюсь ), для использования функций СОМ-сервиса, NS>в приложении придётся произвести какие-то дополнительные действия...

NS>А хотелось бы придти к такой ситуации, что я в приложении только подключаю .H файл и NS>могу вызывать функции сервиса без каких-то дополнительных действий. Вполне возможно, NS>что сервис для этого будет необходимо каким-то хитрым способом зарегистрировать в NS>системе...

NS>Т.е. к предидущим вопросам добавляется ещё один — нужно ли для использования функций NS>СОМ-сервиса что-то дописывать в приложение его вызывающее?


грубо говоря кроме CoInitialize() ничего , ничего дополнительного не надо.
Re: Спасибо всем кто ответил.
От: NightStalker  
Дата: 10.06.03 12:36
Оценка:
Условие связи между приложениями и сервисом поменялись — теперь они будут работать через pipe, а с этим я думаю, что справлюсь .

Поэтому просто ещё раз благодарю за ответы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.