如何在没有 __uuidof 的情况下从 C 调用 DXGI

How to call DXGI from C without __uuidof

我不确定如何在没有仅限 C++ 的 __uuidof 运算符的情况下获取 DXGI GUID。整个 MSDN 代码都使用了它。我也不确定在 C 中调用 OO Windows API 的语法。

我已经在 MSDN 和此处进行了检查,但一无所获。

#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

第一个有效,但 C 版本因未解决的 DXGI 相关外部(EnumAdapters 和 EnumOutputs 以及 IID_DXGIFactory)而失败。

这应该没问题:

#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)))
        {
            // ...
        }
    }
}