Конференция "Corba" » Передача ссылки на созданный объект в другой процесс (маршалинг) [Delphi, Windows]
 
  • Сергей М. © (02.04.08 08:21) [20]

    > OleAutomation


    Пересоздай СОМ-сервер, убрав в визарде крыжик "Make Interface OleAutomation"
  • _Z_ (02.04.08 08:59) [21]

    > Пересоздай СОМ-сервер, убрав в визарде крыжик "Make Interface
    > OleAutomation"

    Не помогло. Все также - из самого процесса сервера все ок, а из другого - Interface not supported.

    Также возникает вопрос - почему при незапущенном процессе сервера клиент выдает Класс не зарегистрирован? Судя по книжке при первом запуске сервера тот должен зарегистрировать свой ком объект в реестре в разделе CLSID. За это вроде бы отвечает код:
    TTypedComObjectFactory.Create(ComServer, TTest, Class_Test,
       ciMultiInstance, tmApartment);


    Но в реестре ничего не нахожу ни во время работы сервера (непонятно тогда как клиент его вообще находит?), ни после.
  • Сергей М. © (02.04.08 09:41) [22]

    > Судя по книжке при первом запуске сервера тот должен зарегистрировать
    > свой ком объект в реестре в разделе CLSID


    Совершенно верно. И не только там.

    Попробуй промониторить обращения твоего СОМ-сервера при старте к реестру на предмет регистрации. Средством для мониторинга можно выбрать, например, RegMon от sysinternals.com
  • _Z_ (02.04.08 10:42) [23]

    > Совершенно верно. И не только там.
    >
    > Попробуй промониторить обращения твоего СОМ-сервера при
    > старте к реестру на предмет регистрации. Средством для мониторинга
    > можно выбрать, например, RegMon от sysinternals.com


    Попробовал. Нету там обращений к HKCR\CLSID как это должно быть по книжке (потому и не нахожу там ничего). Зато есть
    618.06370894 COMSrv.exe:3452 OpenKey HKCU\CLSID\{4E06D1B4-0310-42FD-B72E-9ABE9B4F4D4B} NOTFOUND  

    Такого раздела нет вообще!

    Я совсем в ступоре.
  • Ага (02.04.08 11:02) [24]
    >Запускаю ехе с сервером, запускаю клиента, жму кнопку, получаю исключение Interface not supported.

    У тя регистрация сервака не прошла. Первый раз его нать под админом запустить, а то прав на реестр не хватит.

    А флажок OleAutomation верни, без него точно работать не будет. Ток сначала запусти сервак с ключом /UNREGSERVER (на всяк случай:)), потом верни флажок, пересобери, и запусти с флажком OleAutomation. Оба запуска - под админом.
  • _Z_ (02.04.08 11:21) [25]

    > У тя регистрация сервака не прошла. Первый раз его нать
    > под админом запустить, а то прав на реестр не хватит.
    >
    > А флажок OleAutomation верни, без него точно работать не
    > будет. Ток сначала запусти сервак с ключом /UNREGSERVER
    > (на всяк случай:)), потом верни флажок, пересобери, и запусти
    > с флажком OleAutomation. Оба запуска - под админом.


    Хыхы, блин. Все всегда под админом делал. Что сделал сейчас. Для старого сервера выполнил /unregserver. Пересоздал с включенным крыжыком OleAutomation. И знаете что помогло? Запуск ComSrv.exe /regserver !!! Почему про это нигде не написано??? Типа все само зарегится. Не регилось. Теперь из клиента все пашет, при вызовепроцедуры запускается приложение сервера (вместе с формой) и все работает.

    Для тестов еще раз сделал /unregserver, запустил сервер - не появилось в реестре ничего. Сделал снова /regserver - все снова появилось. Книжка врет? Или я че то не догоняю?
    Вот, теперь остается вопрос
  • NS (02.04.08 11:25) [26]
    >[Delphi, Windows]
    А ты в курсе, что и то и другое ваще-т разных версий бывают?
    Книжка не врет, как минимум по D7 включительно Exe-сервак при старте регится автоматом независимо от ключей. Че там дальше наворотили - не в курсях.
  • _Z_ (02.04.08 11:47) [27]

    > Книжка не врет, как минимум по D7 включительно Exe-сервак
    > при старте регится автоматом независимо от ключей. Че там
    > дальше наворотили - не в курсях.

    Делаю в делфи 2007. Может действительно в нем автоматическую регистрацию убрали?

    Ладно. С этим разобралися. Теперь возвращаемся к вопросу передачи ссылки на объект, созданный на сервере к клиенту. В книжке этот вопрос не рассматривается.
  • Сергей М. © (02.04.08 13:11) [28]

    > флажок OleAutomation верни, без него точно работать не будет


    С какого перепугу ?
    олей-автоматизация автору нафих не нужна.
  • Сергей М. © (02.04.08 13:12) [29]

    > Теперь возвращаемся к вопросу передачи ссылки на объект,
    >  созданный на сервере к клиенту


    Возвращаемся.
    Но прежде всего уточни, а устраивает ли тебя такая схема - процесс сервера стартует лишь по запросу клиента ?
  • ага (02.04.08 13:20) [30]
    >С какого перепугу ?
    олей-автоматизация автору нафих не нужна.


    Да? А кто тады маршалингом заниматься будет? Автоматизация не нужна,  оле-совместимость нужна. Дык автоматизация - Dual.
  • ага (02.04.08 13:25) [31]
    >Теперь возвращаемся к вопросу передачи ссылки на объект, созданный на сервере к клиенту.

    Нифига не возвращаемся. Ты про какие объекты толкуешь, про дельфийские что-ли? И че клиент будет делать с указателем на ВАП чужого процесса? Лучше вернись к вопросу организации памяти в винде.
  • Сергей М. © (02.04.08 13:42) [32]

    > кто тады маршалингом заниматься будет?


    Маршаллингом будет заниматься прокси на стороне контроллера и стаб на стороне сервера.
  • _Z_ (02.04.08 13:45) [33]

    > Возвращаемся.
    > Но прежде всего уточни, а устраивает ли тебя такая схема
    > - процесс сервера стартует лишь по запросу клиента ?


    Когда я разберусь с передачей ссылки, тогда и буду все это встраивать в службу (service). Ну или еще что то придумаю. Сейчас для меня главное разобраться в технологии COM. Вернее сказать служба у меня уже есть, я к ней хочу прикрутить доступ через COM (ну к объекту в этой службе)
  • Сергей М. © (02.04.08 13:48) [34]

    > ага   (02.04.08 13:25) [31]


    > про какие объекты толкуешь, про дельфийские что-ли?


    Не придирайся.
    Понятно же, что на COM-интерфейсные.

    Лучше посоветуй автору отказаться от COM/DCOM и регистрируемых в реестре серверов в пользу собственноручно выбранного транспорта (сокеты, пайпы - это уж на вкус выбирать), контролируемого маршаллинга (а-ля sconnect) и нерегистрируемых internal-серверов.
  • Сергей М. © (02.04.08 13:49) [35]

    > служба у меня уже есть, я к ней хочу прикрутить доступ через
    > COM


    Тогда стандартный визард тебе не подойдет.
  • _Z_ (02.04.08 13:54) [36]

    > Тогда стандартный визард тебе не подойдет.

    Почему не подойдет? От такого ком объекта нельзя передавать ссылки?
  • Сергей М. © (02.04.08 13:59) [37]
  • ага (02.04.08 14:01) [38]
    >Маршаллингом будет заниматься прокси на стороне контроллера и стаб на стороне сервера.

    Во как:) А откуда они возьмутся?
  • _Z_ (02.04.08 14:02) [39]

    > http://www.delphikingdom.info/asp/answer.asp?IDAnswer=54223

    Ну и в чем проблема? Оформим сервис и COM объект как требуется для служб.
 
Конференция "Corba" » Передача ссылки на созданный объект в другой процесс (маршалинг) [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]