我正在处理一个使用DirectX的C项目,遇到了一个问题。某些DX调用需要一个IID
对象,通常使用__uuidof
生成。有一件事是必需的,那就是创建一个RenderTargetView。DirectX示例/教程可以做到这一点:
ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );
当我尝试在C代码中调用__uuidof
时,我得到一个编译器错误:Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C
。DirectX有一个C接口,所以我想一定有办法做到这一点,但我不知道它会是什么。有人知道吗?
__uuidof
仅在C++中可用,如错误所述。我认为您已经在DX头文件中定义了C接口的GUID。
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/1306b57f-4b75-4f0c-b4f3-9bcc1e3a0dd6
来自d3d11.h
:
EXTERN_C const IID IID_ID3D11Texture2D;
使用此项而不是__uuidof(ID3D11Texture2D)
。
您必须找到类的uuid或"guid"。它应该在directx-sdk(旧版)或Platform sdk(在Windows Vista和Windows 7上)的某个标头中,这取决于您使用的内容。