Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alternative to __uuidof in C

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?

like image 205
Kyle Avatar asked Jan 15 '12 09:01

Kyle


2 Answers

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

like image 144
rkosegi Avatar answered Oct 18 '22 02:10

rkosegi


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.

like image 2
mayo Avatar answered Oct 18 '22 03:10

mayo