문제

IDL에서 인터페이스를 정의 할 때 아무것도 파생되지 않는 Midl Precompiler는 그러한 것으로 경고합니다 (Visual C ++ 2008).
경고 midl2271 : [개체] 인터페이스는 iunknown (...)과 같은 다른 [개체] 인터페이스에서 파생되어야합니다.

그리고 iunknown에서 파생되지 않는 다른 인터페이스에서 내 인터페이스를 도출하면 Midl이 실패합니다.
오류 Midl2257 : iunknown만이 루트 인터페이스로 사용될 수 있습니다 (...)

자, 내 질문 : 이것은 COM 또는 Midl Precompiler의 한계입니까?

나는 최근에 D3D10 헤더를보고 있었고 D3d10.h는 IDL을 사용하여 생성되었습니다 (MIDL 은이 효과에 의견을 추가합니다). 그리고 모든 인터페이스는 어떤 식 으로든 iunknown에서 파생됩니다.

그러나 주변 헤더 (D3d10Shader.h, d3d10effect.h 등)에는 수동으로 정의 된 COM 인터페이스가 포함되어 있으며, 일부는 여기에 설명 된 경고 또는 오류를 트리거합니다. 나는 그들이 그 한계를 피하기 위해 수동으로 정의해야한다고 가정 할 수 있습니다.

내가 맞아? MIDL이 왜 순수한 인터페이스를 방지합니까?

도움이 되었습니까?

해결책

iunknown에서 파생되지 않는 인터페이스는 com이 아닙니다. 이것은 메모리 관리 및 인터페이스 발견을 허용하는 기본 빌딩 블록입니다.

iunknown에서 파생되지 않는 인터페이스가있을 수 있습니다. 그러나 그것들은 com이 아니며, 그것들은 단지 정상적인 포인터 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top