我正在处理一个使用 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 上)的某个标头中 - 取决于您使用的是什么。
通常,类的 UIID 在 C 接口头文件中定义为类名前面加上前缀“IID_”(请参阅已接受的答案)。 创建纯 C 项目时,如果您想继续使用 C++ 形式,您可以创建一个简单的宏:
#ifndef __cplusplus
#define __uuidof(iid) IID_##iid
#endif
如果类 IID 以标准形式 IID_