Регистрация COM-объекта только с файлом IDL - PullRequest
3 голосов
/ 22 июля 2011

У меня есть сторонний файл IDL , который при компиляции создает заголовок и файл _i.c. Все эти три файла являются частью проекта Visual Studio 2010. (Пока проект пуст, кроме попыток инициализации COM).

Я могу получить проект для компиляции, вызвав

CoInitialize(NULL);
CoCreateInstance(stuff);

Во время выполнения CoCreateInstance () возвращает ошибку «Класс не зарегистрирован».

Все, что я могу найти в Интернете, говорит о регистрации COM-объекта путем запуска regsvr32 в файле DLL или EXE-файле. Однако у меня есть только файл IDL. Я попытался зарегистрировать EXE-файл, сгенерированный проектом, но получил сообщение о том, что модуль «загружен, но точка входа DLLRegisterServer не найдена».

Честно говоря, я не уверен, что еще можно попробовать.

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

IDL-файлы определяют интерфейсы, а не реализации.Если буквально все, что у вас есть в этом стороннем компоненте, это файл IDL, то у вас нет ничего, что вы могли бы зарегистрировать.

Возможно, что файл IDL описывает интерфейсы, в которые вы будете внедрять этот сторонний код;в этом случае вы не будете CoCreateInstance их, они могут CoCreateInstance вас.Но, учитывая объем информации, я склоняюсь к тому, что вы упускаете фактический сторонний компонент или неправильно передаете CoCreateInstance.

2 голосов
/ 22 июля 2011

Файл IDL (файл определения интерфейса) не обеспечивает реализации для типов, объявленных для него; он только указывает, как вы можете взаимодействовать с классами, закодированными в DLL, которая реализует файл IDL.

Недостаточно IDL-файла, вам также понадобится DLL, которая его реализует.

...