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?
Компилятору MIDL нужен файл IDL для ссылки или библиотека типов. Интерфейсы Direct2D недоступны ни одному из этих методов. Они также не доступны через зарегистрированную библиотеку типов — они есть только в качестве заголовков C ++ в Windows SDK.
Одним из способов будет дублирование определений в вашем файле IDL / TLB, однако я рекомендую принять тот факт, что интерфейсы не определены в домене IDL, и использовать IUnknown
там вместо Потребитель библиотеки типов всегда может сделать IUnknown::QueryInterface
для рассматриваемого интерфейса.
interface IXXX : IUnknown
{
HRESULT XXX([out, retval] IUnkown** ppRendererTargetUnknown);
}