ID2D1RenderTarget
是d2d1.h
中定义的界面。我想在我的IDL界面中使用它,如下所示:
interface IXXX : IUnknown {
HRESULT XXX([out, retval] ID2D1RenderTarget **_ppRT);
}
SDK中未包含 d2d1.idl
,我只能获得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
?
答案 0 :(得分:1)
MIDL编译器需要一个IDL文件来验证,或者需要一个类型库。 Direct2D接口不适用于任何这些方法。它们也不能通过注册类型库获得 - 您只能将它们作为Windows SDK中的C ++标题。
一种方法是在IDL / TLB文件中复制定义,但我建议接受IDL域中未定义接口并在其中使用IUnknown
这一事实。对于相关接口,类型库使用者总是可以IUnknown::QueryInterface
。
interface IXXX : IUnknown
{
HRESULT XXX([out, retval] IUnkown** ppRendererTargetUnknown);
}