Альтернатива __uuidof в C

Я работаю с проектом C, использующим DirectX, и столкнулся с проблемой. Некоторые вызовы DX требуют IID объект, обычно генерируемый с __uuidof, Одна вещь, для которой это требуется, - это создание RenderTargetView. Примеры / учебные пособия по DirectX делают это:

ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );

Когда я пытаюсь позвонить __uuidof в моем коде C я получаю ошибку компилятора: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C, DirectX имеет интерфейс C, поэтому я думаю, что должен быть способ сделать это, но я понятия не имею, что это будет. Кто-нибудь знает?

3 ответа

Решение

__uuidof доступно только в C++, как описано выше. Я думаю, что у вас уже есть определения GUID интерфейсов для C, доступных в заголовочных файлах DX.

http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/1306b57f-4b75-4f0c-b4f3-9bcc1e3a0dd6

От d3d11.h:

EXTERN_C const IID IID_ID3D11Texture2D;

Используйте это вместо __uuidof(ID3D11Texture2D),

Вы должны найти UUID или "Guid" класса. он должен быть в каком-то заголовке в DirectX SDK (более старой версии) или в Platform SDK (в Windows Vista и Windows 7) - в зависимости от того, что вы используете.

Обычно UIID класса определяется в заголовочном файле интерфейса C как имя класса, перед которым стоит префикс «IID_» (см. принятый ответ). При создании простых проектов C, если вы хотите продолжать использовать форму C++, вы можете создать простой макрос:

      #ifndef __cplusplus
#define __uuidof(iid) IID_##iid
#endif

Это будет работать, если для класса IID существует определение в стандартной форме IID_<имя класса>.

Другие вопросы по тегам