2012-05-26 2 views
0

내가 추상적 인 방법과 인터페이스의 IUnknown 또는 IDispatch를 방법에 대한 코드를 할 필요가없는 동안 우리는 단순히 우리의 인터페이스에서 메소드를 오버라이드 (override) VB/C#에서 을 상속 할 필요가있는 정의인터페이스 및의 IUnknown 상속, IDispatch 메서드가

하지만, C++에, 클래스에서 인터페이스, 에서 & 최우선 방법을 인터페이스를 상속 후 나는

error C2259: 'Imyinterface' : cannot instantiate abstract class 
1>   due to following members: 



'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract 
'ULONG IUnknown::AddRef(void)' : is abstract 
'ULONG IUnknown::Release(void)' : is abstract 

그래서 난/d를 재정의해야 오류가 다음 무엇입니까 파생 클래스 를 인스턴스화하려고 할 때 예 : IUnknown 및 IDispatch 메소드 addref, Release, QueryInterface, invoke, gettypeinfo

표준 함수로 보이므로 어떻게하면 ATL 또는 typelib과 같은 코드/정의를 얻을 수 있습니까? 또는 위의 메서드 코드/예제를 얻을 수있는 모든 참조

+0

COM 관련 질문이 많아서 COM 태그를 추가했습니다. – juanchopanza

+0

http://msdn.microsoft.com/en-us/library/c43h4867.aspx –

답변

0

기본 클래스에 순수 가상으로 선언 된 모든 함수와 해당 메서드를 재정의하고 파생 클래스에서 해당 정의를 제공해야합니다.
그렇게하지 않으면 파생 클래스도 추상 클래스의 역할을하며 클래스의 객체를 만들 수 없습니다.

두 번째 질문의 경우 해당 메소드의 표준 구현이 수행해야 할 실제 아이디어가 없습니다.

+0

감사합니다. 어디에서 정의/예제를 찾을 수 있습니까? – user1176743

0

QueryInterface : 전달 된 GUID로 식별 된 인터페이스에 도달 할 수있는 경우 void ** 매개 변수의 인터페이스에 대한 포인터를 넣습니다. 그렇지 않은 경우 void **NULL으로 설정하십시오. 해당 HRESULT을 반환하십시오.

AddRef : 인터페이스의 참조 횟수를 늘리십시오.

Release : 인터페이스의 참조 횟수를 줄입니다.

나는 이것을 조사하기 전에 COM에 관한 좋은 책을 얻는 것이 좋습니다. Inside Com (Microsoft Programming Series) by Dale Rogerson의 사용 된 사본은 싸다. 예제가 있습니다. 아마존에 대한 리뷰를 읽고이 책을 사고 싶은지 아닌지 알아보십시오.

+0

책의 참고로 고마워요, 코드 나 예제가 있습니까?, 왜냐하면 저는 메커니즘을 설명하지만 견고한 코드/예제가없는 책을 몇 권 읽었 기 때문입니다. – user1176743

관련 문제