Проблема с DLL. 1. Есть DLL (чужая). Она устанавливает соединение с сервером по паролю. Хранит у себя данные об этом соединении и позволяет передавать\получать информацию, указав номер этого соединения. 2. Есть программа, которая грузит эту DLL и устанавливает соединение с сервером. 3. При попытке проделать пункт 2 из другой программы DLL сообщает, что соединение уже установлено и подключаясь вышибает подключение первой программы. 4. При попытке передать данные из другой программы, указав номер соединения, выдается сообщение, что о таком соединении она ничего не знает. Оно и понятно - инфа о соединении лежит принадлежит памяти первого процесса и не разделяется меж процессами. Нужно. Подключить программу №2 через уже запущенную dll. Исходников dll нет. Написать для нее wrapper можно. Я вижу только такой вариант. Сервис-wrapper, грузящий dll при старте ОСи. dll-wrapper для программы №1 обращающийся к сервису. и такой же dll-wrapper для программы №2. Беда в том, что dll принимает в качестве аргументов функций указатели. А значит мне придется производить перекопирование памяти в dll-wrapper'ах. (А можно ли определить размер этих аргументов?). Гемор и не факт что получится. Может есть вариант проще?!!!!! {есть у меня склонность все усложнять}
юзать RPC. т.е. один процесс грузит твою длл и является RPC сервером. остальные (программы N1 N2) являются RPC клиентами. большую часть кода сгенерит MIDL. руками останется написать .def файл и еще DllMain(). в качестве халявного бонуса будет можно запускать проги на разных компах.
Исключено. Там сертификаты безопасности, законодательство и пр. исключено. подключаться только через родную dll. не модифицировать. Выяснилось, что будет не бонусом, а строгим условием. Я искал инфу по RPC и решил было писать DCOM сервер. Но оказалось, что возникают проблемы в сетях без контролера домена. Решил попробовать .NET Remoting. При написании сервера проблем нет. А клиентский объект можно обернуть в COM класс и использовать из обычных win32 приложений. По моему так © Винни-Пух. Надеюсь получится.
В продолжение темы: оригинальную dll обернул wrapper'ом на c# с поддержкой .Net remoting. К нему написан клиент на c# и обернут в COM объект. К клиенту написан wrapper на Delphi экспортирующий набор функций, эквивалентной оригинальной dll. Теперь в папку с оригинальной dll кладется клиент и его wrapper (wrapper заменит оригинальную dll). И куда нибудь ставится оригинальная dll с ее wrapper'ом-сервером. Все это работает на программах, использующих оригинальную длл напрямую. Но есть прога, создающая сервис, использующий оригинальную длл. Так вот сервис не запускается - StartServiceCtrlDispatcher завершается ошибкой. С чем это может быть связано? Благодарен за любые предположения.