Думаю с такой проблемой кто-то сталкивался.
Дело обстоит так: пишу код
IGroupPolicyObject* pGPO;
CoCreateInstance( CLSID_GroupPolicyObject, NULL, CLSCTX_ALL, IID_IGroupPolicyObject, (void**)&pGPO );
а линкер не может найти _IDD_IGroupPolicyObject. Поиски в либах ни к чему не привели. В инете по
этому вопросу такче что-то ничего найти не могу. А микрософт говорит, что кроме заголовочного файла
ничего не надо.
#include <initguid.h>
#include <GPEdit.h>
Все дело в распаковке макроса DEFINE_GUID:
1. Смотрим на определение CLSID_GroupPolicyObject в <GPEdit.h> — line 83:
DEFINE_GUID(CLSID_GroupPolicyObject, 0xea502722, 0xa23d, 0x11d1, 0xa7, 0xd3, 0x0, 0x0, 0xf8, 0x75, 0x71, 0xe3);
2. Смотрим определение DEFINE_GUID в <guiddef.h> — line 59
#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID DECLSPEC_SELECTANY name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID FAR name
#endif // INITGUID
3. Смотрим на файл <initguid.h>
#if _MSC_VER > 1000
#pragma once
#endif
#define INITGUID
#include <guiddef.h>
Итог:
Если подключить <initguid> до использования DEFINE_GUID, то определение GUID-а будет находиться там же где и описание — в h-файле, если не подключить — то его там не будет, будет предполагаться, что он определен в другом файле, например в _i.c
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Здравствуйте, UnrealAlex, Вы писали:
UA>UA>#include <initguid.h>
UA>#include <GPEdit.h>
UA>
Спасибо огромное