2012-01-15 2 views
11

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

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, поэтому я предполагаю, что должен быть способ сделать это, но я понятия не имею, что это будет. Кто-нибудь знает?

+0

Программисты C обычно просто определяют UUID как константу где-то в своем исходном файле. –

ответ

13

__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).

+2

Да, это и было. Единственное другое изменение, которое я должен был сделать, это связать с 'dxguid.lib'. Благодарю. – Kyle

2

Вы должны найти uuid или «guid» класса. он должен быть в каком-то заголовке в файле directx sdk (старше) или в Platform SDK (в Windows Vista и Windows 7) - зависит от того, что вы используете.