Tech & IT/프로그래밍

두개의 오브젝트가 공통으로 사용하는 IDL 이 있을때 클라이언트에서 타입 라이브러리 사용 시 redefinition error 처리 방법

해피콧 2010. 5. 22. 02:28
'); }
'); }


두개의 오브젝트가 공통으로 사용하는 IDL 이 있을때 클라이언트에서 타입 라이브러리 사용 시 redefinition error 처리 방법

이 문서는 이전에 다음 ID로 출판되었음: KR601178

현상

두개의 오브젝트 AObject 와 BObject 가 각각 자신의 타입라이브러리를 갖고 있으며 AObject 와 BObject 의 IDL 파일에 공통적으로 사용되는 IDL 파일이 있는경우 AObject 와 BObject 를 모두 사용하는 클라이언트가 다음과 같이 타입라이브러리를 import 하면
#import	"..\bobjprj\bobjprj.tlb" no_namespace
#import	"..\aobjprj\aobjprj.tlb" no_namespace
				
다음과 같은 오류 메시지가 나온다.
e:\works\tlbguide\client\debug\aobjprj.tlh(55) : error C2011: 
'tagNewType' : 'struct' type redefinition

원인

aobjprj.idl 과 bobjprj.idl 파일이 공통으로 사용하는 자료구조인 NewType 을 동시에 import 하였기 때문.
// datatype.idl

typedef struct tagNewType{
	long	lElement;
}NewType;

// aobjprj.idl : IDL source for aobjprj.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (aobjprj.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
import "..\include\datatype.idl";


// bobjprj.idl : IDL source for bobjprj.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (bobjprj.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
import "..\include\datatype.idl";
		

해결 방법

두 오브젝트를 사용하는 클라이언트는 타입라이브러리를 import 할때 exclude() 문을 사용하여 NewType 이 한번만 import 되도록 지시한다.
#import	"..\bobjprj\bobjprj.tlb" no_namespace
#import	"..\aobjprj\aobjprj.tlb" no_namespace exclude("tagNewType")
				

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 6.0 서비스 팩 5
키워드: 
KB601178