2008-12-17 10 views
1

아무 것도 파생하지 않는 IDL에서 인터페이스를 정의하면 MIDL 사전 컴파일러에서 다음과 같이 경고합니다 (Visual C++ 2008).
경고 MIDL2271 : [개체] 인터페이스는 다른 [
오류 MIDL2257 : 같은IDL을 사용하여 순수 기본 클래스 정의

내가 IUnknown로부터 파생되지 않는 서로 내 인터페이스를 도출 경우에, 관한 실패의 IUnknown (...)와 같은 객체] 인터페이스 만의 IUnknown 루트 인터페이스 (사용할 수있다 .. .)

자, 내 질문 :이 제한 COM 또는 MIDL precompiler 있습니까?

나는 최근에 D3D10 헤더를보고 있었고 d3d10.h는 분명히 IDL (MIDL이이 효과에 대한 설명을 추가)을 사용하여 생성되었습니다. 모든 인터페이스는 IUnknown에서 파생됩니다.

그러나 주변 장치 헤더 (d3d10shader.h, d3d10effect.h 등)에는 수동으로 정의 된 COM 인터페이스가 포함되어 있으며 일부는 여기에 설명 된 경고 또는 오류를 유발합니다. 필자는 이러한 제한을 피하기 위해 수동으로 정의해야한다고 가정 할 수 있습니다.

맞습니까? 왜 MIDL은 순수 인터페이스를 방지합니까?

답변

1

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

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