Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 COM Interop. Чего я не понимаю.  [new]
mikron
Member

Откуда: Germany / Stuttgart
Сообщений: 798
Продолжая разаработку редактора,
решил сделать более полную поддержку буфера обмена - без ограничений на размер текста.
И столкнулся с некоторыми непонятными моментами.
Во первых буфер обмена реализован на COM, и передача данных возможна через глобальную памят (не интересует)
или через COM объект с интерфейсом IStream.
И в нём есть метод чтения
Интересен вопрос с первым параметром. Указатель в память.
Чего я не понимаю: в память какого процесса? Логично предположить что клиента.
Но как COM сервер отображает эти памят в своё адресное пространство?
И откудого он вобще знает границы региона отображения?

Допустим эта магия скрывается за чётким указанием в этом документе

Но посмотрим на реализацию System.Windows.Forms.DataStreamFromComStream
И в частности на метод Read.

Вопрос остаётся открытым: откудого COM / .Net Marshaler знает границы региона отображения?
1 июн 18, 18:44    [21462292]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mikron
Но как COM сервер отображает эти памят в своё адресное пространство?

Interop COM в адресном пространстве клиента. Память одна и та же.
2 июн 18, 09:01    [21462782]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
mikron
Member

Откуда: Germany / Stuttgart
Сообщений: 798
Petro123
mikron
Но как COM сервер отображает эти памят в своё адресное пространство?

Interop COM в адресном пространстве клиента. Память одна и та же.

А если COM сервер исполняется в другом процессе или даже на другой машине?
2 июн 18, 10:19    [21462829]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mikron
Petro123
пропущено...

Interop COM в адресном пространстве клиента. Память одна и та же.

А если COM сервер исполняется в другом процессе или даже на другой машине?

В простом случае это аналог DLL-ки.
В боллее сложном это и зовется по другому сервер автоматизации, OLE Server. Например ворд, эксель.
Тогда маршаллинг, сериализация и все дела.
2 июн 18, 10:46    [21462845]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
mikron
Member

Откуда: Germany / Stuttgart
Сообщений: 798
Petro123
mikron
А если COM сервер исполняется в другом процессе или даже на другой машине?

В простом случае это аналог DLL-ки.

Что за профанация. COM - аналог DLL? Может вы неудачно высказались.
Надеюсь разницу между interop и COM interop понимаете?

Petro123
В боллее сложном это и зовется по другому сервер автоматизации, OLE Server. Например ворд, эксель.
Тогда маршаллинг, сериализация и все дела.

В терминологии Майкрософта это называется COM server

Вопрос остаётся открытым: откудого COM / .Net Marshaler знает границы региона отображения?
2 июн 18, 11:08    [21462860]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mikron,
Я вам сказал, доступным языком про это:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms693344(v=vs.85).aspx
Вы же с вопросом, а не я.
Ищите другие аргументы. Кто против.
2 июн 18, 12:56    [21462985]     Ответить | Цитировать Сообщить модератору
 Re: COM Interop. Чего я не понимаю.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mikron
Что за профанация. COM - аналог DLL

Если в реестре
InprocServer32 C:\Windows\System32\msi.dll
То этот Com ведет себя как dll.
В том же процессе и адреса в памяти одни.
Я про это говорил.
2 июн 18, 13:16    [21463012]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить