2012-01-15 11 views
11

Sto lavorando con un progetto C che utilizza DirectX e ho incontrato un problema. Alcune chiamate DX richiedono un oggetto IID, in genere generato con __uuidof. Una cosa è necessaria per creare un RenderTargetView. I campioni DirectX/tutorial fanno questo:Alternativa a __uuidof in C

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

Quando provo a chiamare __uuidof nel mio codice C, ottengo un errore del compilatore: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C. DirectX ha un'interfaccia C, quindi immagino ci debba essere un modo per farlo, ma non ho idea di cosa sarebbe. Qualcuno sa?

+0

I programmatori C in genere definiscono l'UUID come una costante da qualche parte nel loro file sorgente. –

risposta

13

__uuidof è disponibile solo in C++, come descritto errore. Penso che tu abbia già le definizioni dei GUID delle interfacce per C disponibili nei file header DX.

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

Da d3d11.h:

EXTERN_C const IID IID_ID3D11Texture2D; 

Utilizzare questo invece di __uuidof(ID3D11Texture2D).

+2

Sì, è così. L'unico altro cambiamento che ho dovuto fare è stato il collegamento a 'dxguid.lib'. Grazie. – Kyle

2

devi trovare l'uuid o "guid" della classe. dovrebbe trovarsi in qualche header nel directx sdk (precedente) o nel Platform SDK (su Windows Vista e Windows 7) - dipende da cosa si sta usando.