Search code examples
cvisual-c++guiddxgi

How to call DXGI from C without __uuidof


I'm unsure of how to get DXGI GUIDs without the C++-only __uuidof operator. It's used all over the MSDN code. I'm also unsure of the syntax of calling OO Windows APIs in C.

I've checked on MSDN and here, but found nothing.

#ifdef __cplusplus
CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&factory);
factory->EnumAdapters(0, &adapter);
adapter->EnumOutputs(0, &output);
#else // C version, not correct AFAIK
?? CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory);
?? IDXGI_EnumAdapters(factory, 0, &adapter);
?? IDXGI_EnumOutputs(adapter, 0, &output);
#endif

The first works, but the C version fails with unresolved, DXGI-related externals (EnumAdapters and EnumOutputs and IID_DXGIFactory).


Solution

  • This should be fine:

    #define COBJMACROS
    #include <dxgi.h>
    
    void test()
    {
        IDXGIFactory* factory;
        if (SUCCEEDED(CreateDXGIFactory(&IID_IDXGIFactory, (void**) &factory)))
        {
            IDXGIAdapter* adapter;
            if (SUCCEEDED(IDXGIFactory_EnumAdapters(factory, 0, &adapter)))
            {
                // ...
            }
        }
    }