Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > IID интерфейса


Автор: automax 27.5.2004, 22:15
Здравствуйте!

Мне нужно создать COM dll сервер, который бы реализовывал интерфейс
IRegistrator (задан перечислением функций и параметров). Программа, которая написана не мной вызывает мой COM класс по ProgID, который я указываю ей в настройках. Класс она создает и находит, потому, что я отследил, что запускаются контсруктор и деструктор моего класса. А дальше прога выдает ошибку CreateInstance.

У меня есть подозрение, что после того как прога создала мой COM класс, она пытается найти интерфейс IRegistrator. Мне интересно знать, она может его не находить из-за того , что IID (GUID) моего интерфейса, не совпадает с тем, который был зашит в той проге или же она ищет не по IID.

Если да, то как мне исправить IID моего IRegistrator в VC++ 6.0. ATL проект Simple Object. Меняю в idl файле начинают сыпаться ошибки. Где же тогда его менять?

Если же она ищет не по GUID, то объясните тогда последовательность поиска интерфейса.

Автор: AndyY 28.5.2004, 01:18
в CoCreateInstance можно задать интерфейс объекта - скорее всего клиент так и делает.
проверить легко - поставить breakpoint в QueryInterface (я толком не смотрел как это реализовано в ATL, найти по сорцам думаю тривиально).

Интерфейс тоже сразу станет известен. GUID естественно должен совпадать - советую просто поискать поиском и посмотреть где встречается.

А какие ошибки сыпятся?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)