|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.09.2015, 21:58 | #1 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Подключиться к разделяемому COM-объекту
Подскажите пожалуйста, как правильно подключаться к разделяемому COM-объекту и как этот объект правильно написать?
Предположим, имеется некий объект, выполняющий роль сервера имен в какой-то среде: Код:
Как потом подключиться к этой хрени и получить имя? Имя должно быть одно для нескольких подключающихся клиентов, то есть разделяемое.
В разработке: воспроизводственный контур ИТ
|
23.09.2015, 22:05 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я наверное сейчас реально затуплю, ибо чет туго вопрос понял, но из того, что понял:
Код:
I'm learning to live...
|
23.09.2015, 23:31 | #3 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Это для OLE-объекта в библиотеке, а у меня COM-объект (по интерфейсу) в exe-файле.
В разработке: воспроизводственный контур ИТ
|
24.09.2015, 00:09 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
OLE сами по себе COM объекты, просто они заточены под определенные задачи.
Правильно начать с написания IDL файла, который описывает ваш интерфейс. С его помощью генерится type library, которая регистрируется в системе, как и сам COM клас. Объект регистрируется как out of process server, после этого при попытки создания этого класса через CoCreateInstance ЕХЕ файл запустится. После запуска ЕХЕ регистрирует класс в running table с помощью CoRegisterClassObject. type library дает возможность движку COM автоматизировать вызовы между процессами. Если нет type library, надо будет самому писать proxy/stub для каждого интерфейса, регистрировать их в системе и т.д. |
24.09.2015, 16:37 | #5 | ||
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Цитата:
Про библиотеку типа понял, попробую поэкспериментировать. Всегда казалось, что это просто разновидность RTTI, ориентированной на COM, чтобы импортирующие программы могли сгенерировать интерфейсы и обвязку, не имея исходников. У меня же исходники есть. Модели потоков вроде должны в параметрах задаваться, есть выбор между tmApartment, tmSingle, tmNeutral и tmBoth. Цитата:
Вобщем фигня какая-то. Сделал библиотеку типов, всё прописал. Код:
Код:
Ну вот, скомпилил пример CodeProject-а в VS, а он выдает "CoGetClassObject(): Error(80040154): Класс не зарегистрирован". Цензурные слова у меня кончились.
В разработке: воспроизводственный контур ИТ
Последний раз редактировалось Stilet; 24.09.2015 в 17:41. |
||
24.09.2015, 21:44 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Объект должен быть зарегистрирован в реестре, либо "вручную" в running table (CoRegisterClassObject). Я, правда, не в курсе что и как делает Дельфи, все что я пишу это с точки зрения самого COM.
|
24.09.2015, 22:24 | #7 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Реестр я первым делом проверил. В реестре всё есть и в случае Delphi, и в случае Visual Studio. А вот ошибки почти похожи.
В разработке: воспроизводственный контур ИТ
|
24.09.2015, 23:22 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Нет, это весьма разные ошибки.
Class not registered указывает, что объект вообще не зарегистрирован и/или в данных в реестре допущена ошибка. Interface not registered указывает, что объект найден и его пытаются создать, но для нужного интерфейса нет зарегистриванного proxy/stub DLL. Это DLL будет грузится в оба процесса и должен будет заниматься маршалингом данных для вызовов. Обычно этим занимается сам COM на основе type library. Как регистрировали sample из CodeProject? В том примере есть reg фйла но его надо допиливать. |
25.09.2015, 13:20 | #9 | ||
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Цитата:
Блин, только сейчас заметил, что там есть исходники, которые можно скачать. Вчера в упор не видел ссылку. Копировал исходник из статьи, проделав нужные действия в VS вручную. Посмотрел этот reg-файл, поискал его GUID в своем реестре, не нашел. Еще один Отредактировал reg-файл под себя, применил. Теперь при запуске клиента запускается приложение сервера и... клиент зависает при попытке получить интерфейс фабрики классов: Цитата:
В разработке: воспроизводственный контур ИТ
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Атомарный доступ к разделяемому ресурсу | TELEPUZ | C# (си шарп) | 2 | 19.03.2014 11:39 |
доступ к объекту | Unique_Maks | Общие вопросы Delphi | 4 | 27.07.2013 20:27 |
Вопрос по COM объекту | koljsch | C++ Builder | 15 | 16.09.2012 22:16 |
вопрос по объекту Comment | Обыватель | Microsoft Office Excel | 4 | 25.12.2009 10:49 |
вопрос по объекту tchart | prasvit | Помощь студентам | 6 | 25.03.2009 21:45 |