0 / 0 / 0
Регистрация: 31.12.2013
Сообщений: 4
|
|
1 | |
Внутренний сервер COM как локальный17.01.2014, 14:13. Показов 2113. Ответов 5
Метки нет (Все метки)
Добрый день! Есть COM сервер в dll. Если обращаться к нему как к внутреннему - все работает. Однако при попытках обратиться как local процессу(с помощью dllhost), запускается dllhost c моей дллкой, создается экземпляр сервера, но при фабрика почему-то в итоге возвращает REGDB_E_IIDNOTREG. В связи с этим вопрос - каким образом правильно сделать так, чтобы внутренний сервер COM запустить как локальный?
0
|
17.01.2014, 14:13 | |
Ответы с готовыми решениями:
5
Как перенаправить почту домена на внутренний сервер? Как локальный сервер сделать глобальным Как зарегистрировать новый локальный сервер? Как отправить запрос на локальный сервер? |
Ушел с форума
|
|
17.01.2014, 14:40 | 2 |
Как я понимаю, речь идет об DllSurrogate ?
COM-сервер должен быть правильно зарегистрирован: должны быть все нужные значения в разделах CLSID, AppID, TypeLib и Interface. У меня, помню, COM-сервер не хотел работать в dllhost, пока я не добавил запись ProxyStubClsid32 в его <clsid> ключ реестра.
1
|
0 / 0 / 0
Регистрация: 31.12.2013
Сообщений: 4
|
|
17.01.2014, 15:26 [ТС] | 3 |
Да, o DllSurrogate. В книжке написано, что чтобы работало нужно добавить appid запись в clisd и создать appid ключ с записью DllSurrogate. Интерфейсы в реестре надо добавлять и в полноценных экзешниках и в сурогатах?
0
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,422
|
|
17.01.2014, 15:55 | 4 |
в реестр надо добавлять всегда. все что работает без него - фокус. как вариант для экспериментов - проект com_server_test (clear).rar лежащий в https://www.cyberforum.ru/com-... ost3538077
0
|
Ушел с форума
|
|
17.01.2014, 16:00 | 5 |
Что за книжка, если не секрет ?
Код
HKEY_CLASSES_ROOT { AppID { <clsid> { REG_SZ @Default@ = "SomeName" REG_SZ DllSurrogate = "" } } CLSID { <clsid> { REG_SZ @Default@ = "SomeName" REG_SZ AppID = <clsid> InprocServer32 { REG_SZ @Default@ = "path-to-dll" REG_SZ ThreadingModel = Both } TypeLib { REG_SZ @Default@ = <libid> } } } Interface { <iid> { REG_SZ @Default@ = "SomeName" ProxyStubClsid32 { REG_SZ @Default@ = {00020424-0000-0000-C000-000000000046} } TypeLib { REG_SZ @Default@ = <libid> REG_SZ Version = 1.0 } } } TypeLib { <libid> { 1.0 { REG_SZ @Default@ = "SomeName" 0 { win32 { REG_SZ @Default@ = "path-to-typelib" } } FLAGS { REG_SZ @Default@ = 0 } } } } } @Default@ - это значение ключа реестра по умолчанию. SomeName - это названия соответствующих компонентов, например MyComServer Type Library. Они в 99% случаев опциональны, но на всякий случай привожу все, чтобы не искажать картину. <clsid> - это ID COM-класса, <iid> - это ID интерфейса, <libid> - ID библиотеки типов. path-to-dll указывает на путь к dll-ке, а path-to-typelib - путь к библиотеке типов. Если у вас библиотека типов "вживлена" в dll как ресурс, то эти пути будут совпадать. Вручную нужно заносить только CLSID и AppID, а TypeLib и Interface создаются автоматически, при регистрации библиотеки типов с помощью функции RegisterTypeLib. ThreadingModel может быть любой, у меня стоит "Both", например. Пара моментов. 1) Все типы, использующиеся в COM-сервере, должны быть совместимыми с Automation, иначе система не сможет маршаллить их между процессами. 2) Интерфейсы, которые будут вызываться через границы процессов, должны быть помечены атрибутом oleautomation. 3) Для создания inproc-сервера в dllhost следует использовать CoCreateInstance с флагом CLSCTX_LOCAL_SERVER. 4) Не забывайте вызывать CoInitialize(Ex) на клиенте.
1
|
0 / 0 / 0
Регистрация: 31.12.2013
Сообщений: 4
|
|
19.01.2014, 23:38 [ТС] | 6 |
"Троелсен. Модель Com", и вот эта: http://thrysoee.dk/InsideCOM+/ch12b.htm
Большое спасибо! попробую по вашей схеме.
0
|
19.01.2014, 23:38 | |
19.01.2014, 23:38 | |
Помогаю со студенческими работами здесь
6
Python + локальный сервер, как настроить Локальный сервер SQL ,как перенести ? Как установить и настроить локальный web-сервер? Как в Tor Browser настроить локальный сервер? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
|
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
|
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
|
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
|
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
|