ID2D1RenderTarget
是在d2d1.h
中定义的接口。我想在我的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接口。它们也不能通过注册的类型库使用-您只能将它们作为Windows SDK中的C ++头文件使用。
一种方法是在您的IDL / TLB文件中复制定义,但是我建议您接受IDL域中接口未定义的事实,而在其中使用IUnknown
。类型库使用者始终可以对所涉及的接口执行IUnknown::QueryInterface
。
interface IXXX : IUnknown
{
HRESULT XXX([out, retval] IUnkown** ppRendererTargetUnknown);
}
关于c++ - [MIDL]如何使用IDL文件中C/C++ header 中声明的接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27479928/