2010-03-03 7 views
0

우리는 이런가 someting이 중 두 정의 다중 인터페이스와 IDL 파일있다 : 그들은 두 전혀 관련 인터페이스이다IDL 파일에서 이름 충돌이 발생합니다.

[ 
    object, 
    uuid(79E24BAA-DC12-4caf-91DD-2A4D47FED30A), 
    helpstring("ISomeInterface Interface"), 
    pointer_default(unique) 
] 
interface ISomeInterface: IUnknown 
{ 
    [propget, id(2)] 
    HRESULT SOMEMethod([out, retval] BSTR* pValue); 
}; 

[ 
    object, 
    uuid(834421B6-511D-457D-B50C-69E7E1B65471), 
    dual, 
    nonextensible, 
    helpstring("IACompleteDifferentInterface Interface"), 
    pointer_default(unique) 
] 
interface IACompleteDifferentInterface : IDispatch 
{ 
    [propget, helpstring("property SomeMethod")] 
    HRESULT SomeMethod([out, retval] BSTR* pVal); 
    [propput, helpstring("property SomeMethod")] 
    HRESULT SomeMethod([in] BSTR newVal); 
} 

를, 즉, (동일한 이름을 가진 하나 개의 방법이 일어날 상이한 케이싱 있지만 표시). 모든 것은 우리가

ISomeInterface -> SOMEMethod 

우리가 존재하지 않는 말하는 오류를 호출하는 프로젝트를 컴파일하려고하지만, 확인을 보인다. 우리가 전화하면

ISomeInterface -> SomeMethod 

잘 컴파일됩니다.

두 메서드 중 하나의 이름을 바꾸면 ok도 컴파일됩니다. 두 개의 서로 다른 인터페이스에서 이름 충돌을 기대하지는 않지만 그 일은 일어나는 것처럼 보입니다.

우리는 그 중 하나의 이름을 변경하여 문제를 해결할 수 있지만 문제를 이해하고 싶습니다. 아무도 나를 위해 그것을 설명 할 수 있습니까? 감사합니다.

답변

2

심령 디버깅 파워 Z는 관리 프로젝트에서 유형 라이브러리를 사용하고 있음을 나타냅니다. .NET 유형 라이브러리 임포터 (Tlbimp.exe)는 모호한 버그가 있으며, 라이브러리에 두 번 이상 나타나는 경우 메소드 또는 특성 이름을 부적절하게 대문자로 표시합니다. 발견 된 첫 번째 문자의 대소 문자를 사용합니다.

첫 번째 방법은 무시하는 것입니다. 관리 코드는 잘못된 대문자 사용으로 식별자를 사용할 수 있습니다. 또는 수입 업체를 업그레이드 할 수 있습니다.이 버그가 this one에 수정되었다고 확신합니다.

+0

감사합니다. phsyic 디버깅 기능이 관리되는 C# 프로젝트에서 사용하고 있다는 사실에 놀라움을 금치 못했습니다. 나는 당신이 제안한 새로운 tlbimp를 시도 할 것입니다, 고마워요. –

0

IDL은 나에게 잘 보입니다. 결과 형식 라이브러리를 앱으로 가져 오는 방법에 문제가 있어야합니다.

#import 문을 확인하십시오. "SOMEMethod"를 "SomeMethod"로 변경하거나 ISomeInterface를 IACompleteDifferentInterface로 변경하는 이름 바꾸기 특성이 있습니까?

# import로 자동 생성 된 헤더를 살펴보십시오. 거기에 단서를 찾을 수 있습니다.

관련 문제