Я хочу использовать COM-объект в моем проекте VS2012. Для этих целей мне был предоставлен IDL-файл, описывающий объект. Я использовал MIDL для создания файла заголовка, который выглядит (частично), как это:Ошибка компоновщика при попытке использовать COM-объект, созданный с помощью IDL
EXTERN_C const CLSID CLSID_COComponent;
#ifdef __cplusplus
class DECLSPEC_UUID("bla bla bla")
COComponent;
#endif
Однако, когда я включил этот заголовок в мой проект, и попытаться использовать CLSID_COComponent
в CoCreateInstance
вызова :.
CComPtr<IModelService> m_IModelService;
hRes = m_IModelService.CoCreateInstance(CLSID_COComponent, NULL, CLSCTX_ALL);
Я получаю сообщение об ошибке компоновщика:
Error 123 error LNK2001: unresolved external symbol _CLSID_COComponent
Однако, если я использую __uuidof(COComponent)
, он прекрасно работает. Также при удалении EXTERN_C
из сгенерированного кода он компилируется.
Точный же код использовался в другом проекте, где я видел его работу. Мой вопрос: что я могу делать неправильно?
MIDL обычно также создает файл .c, который содержит определение GUID,/iid. Кажется, вы не включили его в свой проект. Использование ключевого слова __uuid действительно простое и полностью действующее обходное решение. –
[Файл UUID интерфейса] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa367283.aspx). Обычно имеет формат * _i.c *. Необходимо скомпилировать и связать с окончательным исполняемым изображением. –
IInspectable
Отлично, это действительно трюк! Если вы опубликуете его в качестве ответа, я могу его принять. – Frank