0

ID2D1RenderTarget是在 中定义的接口d2d1.h。我想在我的 IDL 界面中使用它,如下所示:

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

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

我试过包括d2d1.h使用 cpp_quote:

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")在包含之前添加,但它什么也没做。

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

4

1 回答 1

1

MIDL 编译器需要一个 IDL 文件来引用,或者一个类型库。Direct2D 接口在这些方法中均不可用。它们也不能通过注册的类型库获得——您只能将它们作为 Windows SDK 中的 C++ 头文件。

一种方法是在您的 IDL/TLB 文件中复制定义,但是我建议接受接口在 IDL 域中未定义的事实并在IUnknown那里使用。类型库使用者总是可以IUnknown::QueryInterface为有问题的接口做些什么。

interface IXXX : IUnknown 
{
    HRESULT XXX([out, retval] IUnkown** ppRendererTargetUnknown);
}
于 2014-12-15T09:06:57.240 回答