14

I'm working with a C project that's using DirectX and I've run into a problem. Certain DX calls require a IID object, typically generated with __uuidof. One thing this is required for is creating a RenderTargetView. The DirectX samples/tutorials do this:

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

When I try to call __uuidof in my C code, I get an compiler error: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C. DirectX has a C interface, so I imagine there must be a way to do this, but I have no idea what it would be. Anyone know?

alk
  • 69,737
  • 10
  • 105
  • 255
Kyle
  • 1,111
  • 1
  • 12
  • 27

2 Answers2

15

__uuidof is only available in C++, as error described. I think you already have definitions of the GUIDs of the interfaces for C available in DX header files.

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

From d3d11.h:

EXTERN_C const IID IID_ID3D11Texture2D;

Use this instead of __uuidof(ID3D11Texture2D).

rkosegi
  • 14,165
  • 5
  • 50
  • 83
  • 3
    Yep, that did it. The only other change I had to make was to link with `dxguid.lib`. Thanks. – Kyle Jan 15 '12 at 18:16
  • Upvoted, it might be nice to add you'll also need to add the adress-of operator `&` if you are really using C. `ID3D10Texture2D* pBackBuffer; swapchain->lpVtbl->GetBuffer(swapchain, 0, &IID_ID3D10Texture2D, &pBackBuffer);` – hetepeperfan Apr 02 '19 at 10:59
2

you have to find the uuid or "guid" of the class. it should be in some header in the directx sdk (older) or in the Platform SDK (on Windows Vista and Windows 7) - depends on what you are using.

mayo
  • 21
  • 2