2009-06-08 4 views
4

형식 라이브러리는 응용 프로그램 또는 동적 연결 라이브러리 (DLL)에 의해 노출되는 클래스, 인터페이스, 상수 및 프로 시저를 선언합니다. 형식 라이브러리는 일반적으로 프로그램 파일의 리소스입니다. 확장자가 .tlb 또는 .olb 인 독립 실행 형 2 진 파일이 될 수도 있습니다.COM typelib doubt

따라서 일부 DLL이 TypeLib로 선언되지 않고 인터페이스를 계속 노출 할 수 있습니다.

실제로 oleview에서 dll을 열려고하는데 오류 메시지 "형식 라이브러리로드 오류"가 표시됩니다.

내 이해에 따르면 DLL에서 노출 된 인터페이스가 있는지 여부는 oleview에 의해 열려 있어야합니다. 그렇지 않으면 노출 된 인터페이스 나 함수를 가질 수 없습니다.

우리는 dll 노출 인터페이스가 있고 Oleview에서도 볼 수없는 가능성이 있습니다.

+0

dll에 의해 노출 된 인터페이스를 알 수있는 oleview 이외의 도구가 있습니까? – anand

답변

0

OleView에서 형식 라이브러리를 볼 수없는 경우가 있습니다. 이것은 세계에서 가장 안정적인 소프트웨어가 아닙니다. 그것은 유형 라이브러리가 없거나 이렇게 정의 된 인터페이스를 사용할 수 없다는 것을 말하는 것이 아닙니다.

1

... 그것은 가능한 일부 DLL 여전히 TypeLib의 선언으로서 없이 인터페이스를 노출이다.

예. tlb가없는 COM DLL을 가질 수 있습니다 (예 : VC++이 ATL 프로젝트에서 기본적으로 제공하는 것은 아닙니다). 우리는 여전히 DLL 노출 인터페이스를 가지고

가능성은 이는 OLEView 볼 수 없습니다.

그냥 제안해도 좋을지 모르겠지만 DLL에 찾을 수없는 외부 TLB를 참조하는 tlb가 들어있을 수 있습니까?

또한 TLB에는 OLEView가 단순히 요약하지 못하는 지원되지 않는 (아마도 사용자 지정) 유형이 포함될 수 있습니다. 순수한 듀얼 인터페이스 DLL일까요?

1

먼저 도구 모음 버튼을 누르지 말고 파일 -> 형식 라이브러리보기를 사용하여 라이브러리를 열어야합니다. 이는 일반적인 오류입니다.

그런 다음 리소스에 typelib이없는 in-proc COM 서버를 쉽게 가질 수 있지만 후기 바인딩 및 기본 마샬링은 작동하지 않습니다. 그렇지 않으면 정상적으로 작동합니다. 외부에서 정의 된 인터페이스 집합 (예 : IFilter)을 구현할 때는 일반적으로 그렇게하며 아무도 늦은 바인딩이나 COM 서버를 마샬링하지 않도록해야합니다.

3

IUnknown 및 개인 인터페이스 만 지원하는 구성 요소와 익명 COM 구성 요소를 만들 수 있습니다. 구성 요소에 대한 모든 정보를 유형 라이브러리에 정의해야한다는 엄격한 요구 사항은 없습니다. 형식 라이브러리를 사용하면 구성 요소를 통합하려는 사용자가 COM을보다 쉽게 ​​레이아웃하고 다른 정보를 제공 할 수 있습니다.

스크립트 호환 구성 요소 (IDispatch, IDispatchEx)는 런타임 정보 만 지원하기 때문에 일반적으로 기본 형식 라이브러리 또는 전혀 제공되지 않습니다. 그러나 이러한 인터페이스를 노출하는 구성 요소를 사용하면 이러한 인터페이스를 통해 정보를 조사 할 수 있습니다.

마지막으로 OleView는 ITypeLib/ITypeInfo를 사용하여 형식 정보를 검사합니다. 모든 COM 라이브러리가 구현을 제공하는 것은 아니며 일부는 별도의 위치에 정보를 저장하도록 선택할 수 있습니다.