2014-07-15 2 views
0

VB6에서 생성 된 DLL/OCX 네임에 따라 형식 라이브러리 (GUID 및 버전)를 프로그래밍 방식으로 결정할 수있는 방법은 무엇입니까?형식 라이브러리에서 importlib 지시문 가져 오기

배경 : 참조 된 형식 라이브러리 중 하나에서 해당 종속성 중 하나를로드 할 수없는 프로젝트를 열면 VB6 IDE가 중단됩니다. 그러나 어떤 종속성을 충족시킬 수 없는지 또는 심지어 이 참조는 충족 될 수없는 종속성을가집니다. 이것은 내 회사에서 자주 발생하므로 VB6 IDE의 문제 해결 정보를 보완하려고합니다.

관련 세부 사항/시도 :

  • 내가을 은 VB 소스 코드가 있습니다. 그 게 나에게 그 repo의 특정 개정판의 GUID와 버전을 알려주지 만, DLL/OCX/TLB 파일을 분석 할 때 어떤 버전의 repo가 ​​있는지는 알지 못한다. 브랜치에 커밋 된) 주어진 DLL/OCX는에 해당합니다.
  • tlbinf32.dll을 사용해 보았지만 가져 오기를 나열 할 수없는 것으로 보입니다.
  • PE에 대해 많이 알지는 못했지만 PE 뷰어에서 DLL 중 하나를 열었습니다. 가져 오기 섹션에 MSVBVM60.dll 만 표시됩니다. 이것은 VB6 생성 형식 라이브러리의 특수한 것으로 보입니다. 이들은 MSVBVM60에만 연결되지만 나머지 종속성에 대해서는 일종의 지연로드 메커니즘을 가지고 있습니다.
  • 내가 시도한 기존 도구 대부분도 정보를 제공하지 않습니다. 예를 들어, depends.exe는 MSVBVM60.dll만을 찾습니다.
  • : Visual Studio와 함께 제공되는 유틸리티 인 OLEView는 importlib 지시문이 포함 된 IDL 파일을 생성합니다. VB가 IDL 파일을 사용하지 않는다는 것을 감안할 때, 어떻게 든 정보를 분명히 생성합니다. 그래서 가능합니다 - 어떻게 생각하는지 모르겠습니다.

정말로, OLEView가 그것을 수행하지 않았다면 불가능하다고 지금까지 포기했을 것입니다. 이 작업을 수행하는 방법에 대한 의견이 있으십니까?

답변

0

기본 DLL 기능과 COM을 병합하는 것으로 나타났습니다. 모든 DLL이 COM DLL이 아닙니다.

기본 DLL의 경우 Portable Executable 형식에는 가져 오기를 설명하는 섹션이 포함되어 있습니다. 선택적 헤더의 디렉토리 1은 DLL의 가져 오기에 대한 것입니다. 그 구조는 IMAGE_IMPORT_DESCRIPTOR에 의해 주어진다. This은 그 사실을 알기위한 출발점입니다.

COM DLL에는 이와 동등한 기능이없는 것 같지만 공용 인터페이스에 필요한 다른 COM 구성 요소를 찾을 수 있습니다. 노출 된 각 인터페이스에 대해 해당 속성의 형식과 메서드 인수를 나열한 다음 사용하십시오. 레지스트리는 그 유형이 어디에서 왔는지를 찾습니다. tlbinf32.dll은 회원 등록 등을위한 기본 기능 중 일부를 제공합니다. Here 님의 소개와 그에 대한 소개입니다.

관련 문제