2012-01-15 22 views
11

Pracuję z projektem C, który używa DirectX i natknąłem się na problem. Niektóre wywołania DX wymagają obiektu IID, zwykle generowanego z __uuidof. Jedną z rzeczy, do których jest to wymagane, jest utworzenie RenderTargetView. Próbki DirectX/samouczki to zrobić:Alternatywa dla __uuidof w C

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

Kiedy próbuję zadzwonić __uuidof w moim kodu C, pojawia się błąd kompilatora: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C. DirectX ma interfejs C, więc wyobrażam sobie, że musi istnieć sposób, aby to zrobić, ale nie mam pojęcia, co by to było. Ktoś wie?

+0

Programiści C zazwyczaj po prostu definiują UUID jako stałą gdzieś w swoim pliku źródłowym. –

Odpowiedz

13

__uuidof jest dostępny tylko w języku C++, zgodnie z opisem błędu. Myślę, że masz już definicje GUID interfejsów dla C dostępnych w plikach nagłówkowych DX.

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

Od d3d11.h:

EXTERN_C const IID IID_ID3D11Texture2D; 

Użyj tego zamiast __uuidof(ID3D11Texture2D).

+2

Tak, to zrobiło. Jedyną inną zmianą, którą musiałem dokonać, było połączenie z 'dxguid.lib'. Dzięki. – Kyle

2

musisz znaleźć uuid lub "guid" klasy. Powinien znajdować się w nagłówku w DirectX Sdk (starszy) lub w Platform SDK (w Windows Vista i Windows 7) - zależy od tego, z czego korzystasz.