Конференция "Corba" » Передача ссылки на созданный объект в другой процесс (маршалинг) [Delphi, Windows]
 
  • ага (02.04.08 14:07) [40]
    >Лучше посоветуй автору отказаться от COM/DCOM и регистрируемых в реестре серверов в пользу собственноручно выбранного транспорта (сокеты, пайпы - это уж на вкус выбирать), контролируемого маршаллинга (а-ля sconnect) и нерегистрируемых internal-серверов.

    Не, эт я советовать не буду, потому как несогласный я:))
  • Сергей М. © (02.04.08 14:28) [41]

    > откуда они возьмутся?


    А мы работы не боимся - мы сами напишем и прокси и стаб)

    К тому же, плясать под дудку стандартного олей-маршаллинга не всегда удобно и возможно - приходится действовать с постоянной оглядкой на допустимые в олей-автоматизации типы данных, что порой добавляет не меньшую головную боль, чем написание специфичного для конкр.задачи маршаллера.
  • Сергей М. © (02.04.08 14:30) [42]

    > несогласный я


    Ну что ж)
    Насиловать тебя мы тож не вправе)
    Несогласный знач несогласный)

    А по мне так оч даже приятственно не зависеть ни от каких реестров, стандартных проксей-заглушек и прочей шняги)
  • Сергей М. © (02.04.08 14:33) [43]

    > _Z_   (02.04.08 14:02) [39]


    В помощь тебе:

    http://megalib.com/books/923/77715.htm
  • _Z_ (02.04.08 14:46) [44]

    >
    > В помощь тебе:
    >
    > http://megalib.com/books/923/77715.htm

    Спасибо конечно, но
    1. У меня дома бумажный вариант этого дела
    2. Читаем в конце (у меня в бумаге также):
    Нам остается лишь написать реализацию метода:

    function TTest1.ShowIt(const S: WideString): HResult;
    begin
     MessageBoxW(0, PWideChar(S), NIL, 0)
     Result := S_OK; // Стандартный код успешного завершения
    end;

    Для регистрации сервера достаточно один раз запустить его на компьютере клиента.



    Как показала практика не работает.

    Ну и собственно ни в моем бумажном варианте, ни в инете я пока так и не отыскал простого примера по передаче ссылки на объект в другой процесс.
  • ага (02.04.08 15:07) [45]
    >А мы работы не боимся - мы сами напишем и прокси и стаб)

    Кто, автор вопроса? Который тока-тока начал ком осваивать? Не смешите мои тапочки. А нафига оно ему надо, когда стандартного за глаза?

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

    Да не придираюсь я ни разу, ей-ей. Он же книгу читает, че, там не написано, как интерфейсы передавать.

    >_Z_   (02.04.08 14:46) [44]
    Упрямый ты. Ты пост [31] читал? Какие ты ссылки на объекты ты собрался передавать из одного процесса в другой, и че ты там собираешься делать. Либо  отвечаешь на эти вопросы, либо дальше без меня.

    >ни в моем бумажном варианте, ни в инете я пока так и не отыскал простого примера по передаче ссылки на объект в другой процесс.

    Еще бы.
  • Сергей М. © (02.04.08 15:09) [46]

    > _Z_   (02.04.08 14:46) [44]
    >
    >


    > Как показала практика не работает


    Что, и с ключем /regserver регистрация тоже не осуществляется ?
    А попытка-то хоть при этом есть, если наблюдать под монитором ?


    > не отыскал простого примера по передаче ссылки на объект
    > в другой процесс


    На какой такой "другой" ?
  • ага (02.04.08 15:12) [47]

    > че, там не написано, как интерфейсы передавать

    Ну это был типа риторичесуий вопрос:))

    > Какие ты ссылки на объекты ты собрался передавать из одного
    > процесса в другой, и че ты там собираешься делать.

    А эт тож вопрос, тока не риторический.
  • Сергей М. © (02.04.08 15:13) [48]

    > Кто, автор вопроса? Который тока-тока начал ком осваивать?


    Именно поэтому я и предложил изучить механизм маршаллинга на примере sconnect.
  • ага (02.04.08 15:26) [49]
    Да нафига оно надо-то?!! Поставил флажок, рзарегил библиотеку типов - готово, имеешь маршалер. Свой городить имеет смысл, когда типы нестандартные, а тут-то нафига? Я вручную прокси-стаб делал, занетие - не для начинающих, однозначно. Лучше студию запустить и там сгенерить.

    Но здесь-то, в этой ветки оно нафига???

    > изучить механизм маршаллинга на примере sconnect

    Да не маршалинг там, в sconnect:(( Так, бледная тень. Куча ограничений, недоделок, плюс глюки.
  • Сергей М. © (02.04.08 15:37) [50]

    > рзарегил библиотеку типов


    Да нафига оно надо-то, что-то там "регить" для узкоспецифической задачи ?)

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

    > Свой городить имеет смысл, когда типы нестандартные


    А вот с этого и надо было автору начинать)

    Мож он какой-нить TMyComponent в оригинальноq его ипостаси собрался туда-сюда гонять)
  • Сергей М. © (02.04.08 15:42) [52]

    > Куча ограничений, недоделок, плюс глюки


    Все это легко снимается, дорабатывается и устраняется.
    Взамен получаем маршаллер, заточенный под любой свой каприз)
  • Сергей М. © (02.04.08 15:46) [53]

    > здесь-то, в этой ветки оно нафига?


    В вопросе, вообще-то, ни СОМ ни OLE не фигурировал.

    Речь шла просто о некоем маршаллинге.
  • ага (02.04.08 16:06) [54]
    2 Сергей М

    Лана, с этим, считаем, разобрались. Вертаемся к вопросу:)

    2 _Z_

    > Ищется пример передачи ссылки на созданный объект (интерфейс)
    > в другой процесс. Что то сам не осилил пока.

    Дык всеж-таки - объект или интерфейс? Разницу асися? И че, в книге нет примера передачи интерфейса?! Я ее канечна не читал, но чет не верится.
    Хотя мож и нет, вещь-то самоочевидная. добавь в метод сервера out или var параметр типа интерфейс и возвращай на здоровье. Но - интерфейс!, не объект!
  • _Z_ (02.04.08 16:13) [55]

    > Дык всеж-таки - объект или интерфейс? Разницу асися? И че,
    >  в книге нет примера передачи интерфейса?! Я ее канечна
    > не читал, но чет не верится.
    > Хотя мож и нет, вещь-то самоочевидная. добавь в метод сервера
    > out или var параметр типа интерфейс и возвращай на здоровье.
    >  Но - интерфейс!, не объект!

    Не интерфейс, объект. Создаем на сервере:

    Obj:=IComObj.Create

    А в клиенте хочу не создавать свой, а использовать созданный на сервере.

    Можно ли так сделать?

    Идея - организовать вывод на форму приложения фрейм (или даже всю форму) из службы. Может конечно я не с того конца подступился... Может и не надо так делать. Может правильнее создавать объект из клиента, а уже при создании запуститься служба и через этот объект мы сможем вытягивать необходимые данные от службы?
  • Сергей М. © (02.04.08 16:29) [56]

    > Может правильнее создавать объект из клиента, а уже при
    > создании запуститься служба и через этот объект мы сможем
    > вытягивать необходимые данные от службы?


    Именно так.
  • ага (02.04.08 16:33) [57]

    > Можно ли так сделать?

    Нет, нельзя. Опять возвращаемся к тому-же - к организации памяти в Windows. И к понятию "виртуальное адресное пространство процесса"


    > Obj:=IComObj.Create

    Это ваще че такое? Кто такой IComObj? Класс? Кокласс? Create - это что? Конструктор? Функция? Если функция, какой тип возвращает?

    Послушай совета - нэ делай сервиса, нэ нада:(
  • _Z_ (02.04.08 16:41) [58]

    > > Может правильнее создавать объект из клиента, а уже при
    >
    > > создании запуститься служба и через этот объект мы сможем
    >
    > > вытягивать необходимые данные от службы?
    >
    >
    > Именно так.


    Ладно, с этим выяснил. Создаю в службе COM сервер, который запустится при запросе клиентом. По сколько ком сервер выполняется в адресном пространстве службы, то он имеет полный доступ к данным этой службы и значит через методы ком сервера можно вытягивать простые типы данных, совместимые с моделью ком? А можно ли тянуть "сложные" данные? Ну к примеру, хочу вытягивать структуры.
  • ага (02.04.08 17:06) [59]

    > хочу вытягивать структуры

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