C 中 __uuidof 的替代方案

问题描述 投票:0回答:3

我正在处理一个使用 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 接口,所以我想一定有一种方法可以做到这一点,但我不知道它会是什么。有谁知道吗?

c visual-studio directx uuid guid
3个回答
16
投票

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


2
投票

你必须找到该类的 uuid 或“guid”。它应该位于 directx sdk(旧版)或 Platform SDK(在 Windows Vista 和 Windows 7 上)的某个标头中 - 取决于您使用的是什么。


0
投票

通常,类的 UIID 在 C 接口头文件中定义为类名前面加上前缀“IID_”(请参阅已接受的答案)。 创建纯 C 项目时,如果您想继续使用 C++ 形式,您可以创建一个简单的宏:

#ifndef __cplusplus
#define __uuidof(iid) IID_##iid
#endif

如果类 IID 以标准形式 IID_ 存在,这将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.