2014-12-15 10 views
0

ID2D1RenderTargetd2d1.h에 정의 된 인터페이스입니다. 나는이처럼 내 IDL 인터페이스를 사용하려면 : [MIDL] idl 파일에서 c/C++ 헤더에 선언 된 인터페이스를 사용하는 방법은 무엇입니까?

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

d2d1.idl

는 SDK에 포함되어 있지 않으며 나는 단지 (중, 더 d2d1.tlb) d2d1.h를 얻을 수 있습니다.

내가 cpp_quote 사용 d2d1.h을 포함하여 시도했다 : 그것은 제기

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

을 :

typedef struct ID2D1RenderTarget ID2D1RenderTarget; 

는 오류이 변경 :

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

그런 다음 나는 형식 정의를 추가

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

나는 또한 포함하기 전에 cpp_quote("#define D2D_USE_C_DEFINITIONS")을 추가하려고했지만 아무 것도 만들지 않았습니다.

내 IDL 파일에 ID2D1RenderTarget을 사용하려면 어떻게해야합니까?

답변

1

MIDL 컴파일러는 보충 할 IDL 파일 또는 형식 라이브러리가 필요합니다. Direct2D 인터페이스는 이러한 방법 중 하나를 사용할 수 없습니다. 등록 된 유형 라이브러리를 통해 사용할 수 없습니다. Windows SDK에는 C++ 헤더 만 있습니다.

IDL/TLB 파일에 정의를 복제하는 것이 한 가지 방법 일 수 있습니다. 그러나 인터페이스가 IDL 도메인에서 정의되지 않았으며 대신 IUnknown을 사용하는 것이 좋습니다. 형식 라이브러리 소비자는 문제의 인터페이스에 대해 항상 IUnknown::QueryInterface을 수행 할 수 있습니다.

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