【问题标题】:Alternative to __uuidof in CC 中 __uuidof 的替代方案
【发布时间】:2012-01-15 09:40:53
【问题描述】:

我正在处理一个使用 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 程序员通常只是将 UUID 定义为源文件中某处的常量。

标签: c visual-studio directx uuid guid


【解决方案1】:

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

【讨论】:

  • 是的,做到了。我必须做的唯一其他更改是与dxguid.lib 链接。谢谢。
  • 赞成,如果你真的在使用 C.ID3D10Texture2D* pBackBuffer; swapchain->lpVtbl->GetBuffer(swapchain, 0, &IID_ID3D10Texture2D, &pBackBuffer);
【解决方案2】:

您必须找到班级的 uuid 或“guid”。它应该位于 directx sdk(较旧)或 Platform SDK(在 Windows Vista 和 Windows 7 上)的某个标头中 - 取决于您使用的内容。

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2011-08-24
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多