Подключится через dll чужого процесса.

Тема в разделе "WASM.WIN32", создана пользователем TRUF, 2 фев 2007.

  1. TRUF

    TRUF New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    4
    Проблема с DLL.
    1. Есть DLL (чужая). Она устанавливает соединение с сервером по паролю. Хранит у себя данные об этом соединении и позволяет передавать\получать информацию, указав номер этого соединения.
    2. Есть программа, которая грузит эту DLL и устанавливает соединение с сервером.
    3. При попытке проделать пункт 2 из другой программы DLL сообщает, что соединение уже установлено и подключаясь вышибает подключение первой программы.
    4. При попытке передать данные из другой программы, указав номер соединения, выдается сообщение, что о таком соединении она ничего не знает. Оно и понятно - инфа о соединении лежит принадлежит памяти первого процесса и не разделяется меж процессами.

    Нужно. Подключить программу №2 через уже запущенную dll.

    Исходников dll нет. Написать для нее wrapper можно.

    Я вижу только такой вариант. Сервис-wrapper, грузящий dll при старте ОСи. dll-wrapper для программы №1 обращающийся к сервису. и такой же dll-wrapper для программы №2.
    Беда в том, что dll принимает в качестве аргументов функций указатели. А значит мне придется производить перекопирование памяти в dll-wrapper'ах. (А можно ли определить размер этих аргументов?). Гемор и не факт что получится.

    Может есть вариант проще?!!!!!
    {есть у меня склонность все усложнять}
     
  2. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    юзать RPC. т.е. один процесс грузит твою
    длл и является RPC сервером. остальные
    (программы N1 N2) являются RPC клиентами.
    большую часть кода сгенерит MIDL. руками
    останется написать .def файл и еще DllMain().
    в качестве халявного бонуса будет можно
    запускать проги на разных компах.
     
  3. TRUF

    TRUF New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    4
    Если не сложно, можно ссылку на пример\документацию чего-то подобного?
     
  4. TRUF

    TRUF New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    4
    Исключено. Там сертификаты безопасности, законодательство и пр. исключено. подключаться только через родную dll. не модифицировать.
    Выяснилось, что
    будет не бонусом, а строгим условием.
    Я искал инфу по RPC и решил было писать DCOM сервер. Но оказалось, что возникают проблемы в сетях без контролера домена. Решил попробовать .NET Remoting. При написании сервера проблем нет. А клиентский объект можно обернуть в COM класс и использовать из обычных win32 приложений.
    По моему так © Винни-Пух. Надеюсь получится.
     
  5. TRUF

    TRUF New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    4
    В продолжение темы:
    оригинальную dll обернул wrapper'ом на c# с поддержкой .Net remoting. К нему написан клиент на c# и обернут в COM объект. К клиенту написан wrapper на Delphi экспортирующий набор функций, эквивалентной оригинальной dll.
    Теперь в папку с оригинальной dll кладется клиент и его wrapper (wrapper заменит оригинальную dll). И куда нибудь ставится оригинальная dll с ее wrapper'ом-сервером.

    Все это работает на программах, использующих оригинальную длл напрямую. Но есть прога, создающая сервис, использующий оригинальную длл. Так вот сервис не запускается - StartServiceCtrlDispatcher завершается ошибкой. С чем это может быть связано? Благодарен за любые предположения.