Альтернатива __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_<имя класса>.