1

特定のネイティブ VB6 生成 DLL/OCX が依存するタイプ ライブラリ (GUID とバージョン) をプログラムで特定するにはどうすればよいでしょうか?

背景: 参照されているタイプ ライブラリの 1 つがその依存関係の 1 つを読み込めないプロジェクトを開くと、VB6 IDE がチョークしますが、どの依存関係が満たされないか、またはどの参照に満たすことができない依存関係。これは私の会社ではよくあることなので、VB6 IDE の貧弱なトラブルシューティング情報を補足しようとしています。

関連する詳細/試行:

  • VBのソースコードを持っています。これにより、レポの特定のリビジョンの GUID とバージョンがわかりますが、DLL/OCX/TLB ファイルを分析するとき、レポのバージョンがわかりません (もしあれば、ブランチからのものである可能性があるか、まったくない可能性があります)。特定の DLL/OCX が対応します。
  • を使用してみましtlbinf32.dllたが、インポートを一覧表示できないようです。
  • PE についてはよくわかりませんが、PE ビューアーで DLL の 1 つを開いたところMSVBVM60.dll、インポート セクションにしか表示されませんでした。これは、VB6 で生成されたタイプ ライブラリの特殊な癖のようです。それらはリンクのみをMSVBVM60行いますが、残りの依存関係に対して何らかの遅延ロード メカニズムを備えています。
  • 私が試した既存のツールのほとんどでさえ、情報を提供しません。たとえば、depends.exe はMSVBVM60.dll.
  • ただし、Visual Studio に同梱されていたユーティリティである OLEView は、importlibディレクティブを含む IDL ファイルを生成します。VB が IDL ファイルを使用しないことを考えると、何らかの方法で情報を生成していることは明らかです。それは可能です - 私には方法がわかりません。

本当に、もし OLEView がそれをしなかったなら、私は今では不可能だと諦めていたでしょう。これを達成する方法について何か考えはありますか?

4

1 に答える 1

1

基本的な DLL 機能と COM を混同していたことがわかりました。(すべての DLL が COM DLL であるとは限りません。)

基本的な DLL の場合、Portable Executable 形式には、そのインポートについて説明するセクションが含まれています。オプション ヘッダーのディレクトリ 1 は、DLL のインポートに関するものです。その構造は で与えられIMAGE_IMPORT_DESCRIPTORます。これは、それについて学ぶための出発点です。

COM DLL には同等のものはないようですが、パブリック インターフェイスが必要とする他の COM コンポーネントを見つけることができます。公開されたインターフェイスごとに、プロパティとメソッド引数の型を一覧表示し、レジストリを使用して検索します。それらのタイプがどこから来たのか。tlbinf32.dllメンバーをリストするための基本的な機能の一部を提供します

于 2014-08-24T03:03:56.063 に答える