gpt4 book ai didi

c++ - [MIDL]如何在idl文件中使用c/c++头文件中声明的接口(interface)?

转载 作者:行者123 更新时间:2023-11-28 06:31:21 25 4
gpt4 key购买 nike

ID2D1RenderTarget 是在d2d1.h 中定义的接口(interface)。我想像这样在我的 IDL 界面中使用它:

interface IXXX : IUnknown {
HRESULT XXX([out, retval] ID2D1RenderTarget **_ppRT);
}

d2d1.idl 不包含在 SDK 中,我只能得到 d2d1.h(也没有 d2d1.tlb)。

我尝试使用 cpp_quote 包含 d2d1.h:

cpp_quote("#include <d2d1.h>")

它提出了:

error MIDL2025: syntax error : expecting a type specification near "ID2D1RenderTarget"

然后我添加了一个typedef:

typedef struct ID2D1RenderTarget ID2D1RenderTarget;

错误改为:

error MIDL2011: unresolved type declaration : ID2D1RenderTarget [ Type 'ID2D1RenderTarget' ( Parameter '_ppRT' ) ]

我也尝试在包含之前添加 cpp_quote("#define D2D_USE_C_DEFINITIONS") 但它什么也没做。

那么我应该怎么做才能在我的 IDL 文件中使用 ID2D1RenderTarget

最佳答案

MIDL 编译器需要一个 IDL 文件来引用,或者一个类型库。 Direct2D 接口(interface)不适用于任何这些方法。它们也不能通过已注册的类型库使用 - 您只能将它们作为 Windows SDK 中的 C++ header 。

一种方法是在您的 IDL/TLB 文件中复制定义,但我建议接受接口(interface)在 IDL 域中未定义的事实,并在其中使用 IUnknown。类型库使用者始终可以为相关接口(interface)执行 IUnknown::QueryInterface

interface IXXX : IUnknown 
{
HRESULT XXX([out, retval] IUnkown** ppRendererTargetUnknown);
}

关于c++ - [MIDL]如何在idl文件中使用c/c++头文件中声明的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com