-
> OleAutomation
Пересоздай СОМ-сервер, убрав в визарде крыжик "Make Interface OleAutomation"
-
> Пересоздай СОМ-сервер, убрав в визарде крыжик "Make Interface > OleAutomation"
Не помогло. Все также - из самого процесса сервера все ок, а из другого - Interface not supported. Также возникает вопрос - почему при незапущенном процессе сервера клиент выдает Класс не зарегистрирован? Судя по книжке при первом запуске сервера тот должен зарегистрировать свой ком объект в реестре в разделе CLSID. За это вроде бы отвечает код: TTypedComObjectFactory.Create(ComServer, TTest, Class_Test,
ciMultiInstance, tmApartment); Но в реестре ничего не нахожу ни во время работы сервера (непонятно тогда как клиент его вообще находит?), ни после.
-
> Судя по книжке при первом запуске сервера тот должен зарегистрировать > свой ком объект в реестре в разделе CLSID
Совершенно верно. И не только там.
Попробуй промониторить обращения твоего СОМ-сервера при старте к реестру на предмет регистрации. Средством для мониторинга можно выбрать, например, RegMon от sysinternals.com
-
> Совершенно верно. И не только там. > > Попробуй промониторить обращения твоего СОМ-сервера при > старте к реестру на предмет регистрации. Средством для мониторинга > можно выбрать, например, RegMon от sysinternals.com
Попробовал. Нету там обращений к HKCR\CLSID как это должно быть по книжке (потому и не нахожу там ничего). Зато есть 618.06370894 COMSrv.exe:3452 OpenKey HKCU\CLSID\{4E06D1B4-0310-42FD-B72E-9ABE9B4F4D4B} NOTFOUND
Такого раздела нет вообще!
Я совсем в ступоре.
-
>Запускаю ехе с сервером, запускаю клиента, жму кнопку, получаю исключение Interface not supported.
У тя регистрация сервака не прошла. Первый раз его нать под админом запустить, а то прав на реестр не хватит.
А флажок OleAutomation верни, без него точно работать не будет. Ток сначала запусти сервак с ключом /UNREGSERVER (на всяк случай:)), потом верни флажок, пересобери, и запусти с флажком OleAutomation. Оба запуска - под админом.
-
> У тя регистрация сервака не прошла. Первый раз его нать > под админом запустить, а то прав на реестр не хватит. > > А флажок OleAutomation верни, без него точно работать не > будет. Ток сначала запусти сервак с ключом /UNREGSERVER > (на всяк случай:)), потом верни флажок, пересобери, и запусти > с флажком OleAutomation. Оба запуска - под админом.
Хыхы, блин. Все всегда под админом делал. Что сделал сейчас. Для старого сервера выполнил /unregserver. Пересоздал с включенным крыжыком OleAutomation. И знаете что помогло? Запуск ComSrv.exe /regserver !!! Почему про это нигде не написано??? Типа все само зарегится. Не регилось. Теперь из клиента все пашет, при вызовепроцедуры запускается приложение сервера (вместе с формой) и все работает.
Для тестов еще раз сделал /unregserver, запустил сервер - не появилось в реестре ничего. Сделал снова /regserver - все снова появилось. Книжка врет? Или я че то не догоняю? Вот, теперь остается вопрос
-
>[Delphi, Windows] А ты в курсе, что и то и другое ваще-т разных версий бывают? Книжка не врет, как минимум по D7 включительно Exe-сервак при старте регится автоматом независимо от ключей. Че там дальше наворотили - не в курсях.
-
> Книжка не врет, как минимум по D7 включительно Exe-сервак > при старте регится автоматом независимо от ключей. Че там > дальше наворотили - не в курсях.
Делаю в делфи 2007. Может действительно в нем автоматическую регистрацию убрали?
Ладно. С этим разобралися. Теперь возвращаемся к вопросу передачи ссылки на объект, созданный на сервере к клиенту. В книжке этот вопрос не рассматривается.
-
> флажок OleAutomation верни, без него точно работать не будет
С какого перепугу ? олей-автоматизация автору нафих не нужна.
-
> Теперь возвращаемся к вопросу передачи ссылки на объект, > созданный на сервере к клиенту
Возвращаемся. Но прежде всего уточни, а устраивает ли тебя такая схема - процесс сервера стартует лишь по запросу клиента ?
-
>С какого перепугу ? олей-автоматизация автору нафих не нужна.
Да? А кто тады маршалингом заниматься будет? Автоматизация не нужна, оле-совместимость нужна. Дык автоматизация - Dual.
-
>Теперь возвращаемся к вопросу передачи ссылки на объект, созданный на сервере к клиенту.
Нифига не возвращаемся. Ты про какие объекты толкуешь, про дельфийские что-ли? И че клиент будет делать с указателем на ВАП чужого процесса? Лучше вернись к вопросу организации памяти в винде.
-
> кто тады маршалингом заниматься будет?
Маршаллингом будет заниматься прокси на стороне контроллера и стаб на стороне сервера.
-
> Возвращаемся. > Но прежде всего уточни, а устраивает ли тебя такая схема > - процесс сервера стартует лишь по запросу клиента ?
Когда я разберусь с передачей ссылки, тогда и буду все это встраивать в службу (service). Ну или еще что то придумаю. Сейчас для меня главное разобраться в технологии COM. Вернее сказать служба у меня уже есть, я к ней хочу прикрутить доступ через COM (ну к объекту в этой службе)
-
> ага (02.04.08 13:25) [31]
> про какие объекты толкуешь, про дельфийские что-ли?
Не придирайся. Понятно же, что на COM-интерфейсные.
Лучше посоветуй автору отказаться от COM/DCOM и регистрируемых в реестре серверов в пользу собственноручно выбранного транспорта (сокеты, пайпы - это уж на вкус выбирать), контролируемого маршаллинга (а-ля sconnect) и нерегистрируемых internal-серверов.
-
> служба у меня уже есть, я к ней хочу прикрутить доступ через > COM
Тогда стандартный визард тебе не подойдет.
-
> Тогда стандартный визард тебе не подойдет.
Почему не подойдет? От такого ком объекта нельзя передавать ссылки?
-
-
>Маршаллингом будет заниматься прокси на стороне контроллера и стаб на стороне сервера.
Во как:) А откуда они возьмутся?
-
|