5

タイプライブラリは、アプリケーションまたはダイナミックリンクライブラリ(DLL)によって公開されるクラス、インターフェイス、定数、およびプロシージャを宣言します。タイプライブラリは通常、プログラムファイル内のリソースです。拡張子が.tlbまたは.olbのスタンドアロンバイナリファイルにすることもできます。

したがって、一部のDLLは、TypeLibとして宣言されていなくてもインターフェイスを公開する可能性があります。

実際、oleviewからdllを開こうとすると、「エラー読み込みタイプライブラリ」というエラーメッセージが表示されます。

私の理解によると、DLLから公開されているインターフェイスがある場合は、oleviewで開く必要があります。そうでない場合は、公開されているインターフェイスや関数を使用できません。

インターフェイスを公開しているdllがあり、それでもOleviewで表示できない可能性。

4

4 に答える 4

3

匿名の COM コンポーネントと、IUnknown およびプライベート インターフェイスのみをサポートするコンポーネントを作成することができます。コンポーネントのすべての情報をタイプ ライブラリで定義する必要があるという厳密な要件はありません。タイプ ライブラリは、コンポーネントを統合しようとしている人にとって作業を容易にし、COM のレイアウトやその他の情報を提供します。

また、スクリプト互換コンポーネント (IDispatch、IDispatchEx) は実行時情報のみをサポートする場合があることにも注意してください。そのため、これらは通常、必要最小限のタイプ ライブラリと共に出荷されるか、まったく出荷されません。ただし、これらのインターフェイスを公開するコンポーネントを使用すると、これらのインターフェイスを介してコンポーネントに情報を問い合わせることができます。

最後に、OleView は ITypeLib / ITypeInfo を使用して型情報を調べます。すべての COM ライブラリが実装を提供するわけではなく、別の場所に情報を格納することを選択するものもあります。

于 2009-07-14T14:24:17.633 に答える
1

...一部のDLLが、TypeLibとして宣言されていなくてもインターフェイスを公開している可能性はありますか。

はい。tlbのないCOMDLLを使用できます(ただし、たとえば、ATLプロジェクトでVC ++がデフォルトで製造するものではありません)。

インターフェイスを公開しているdllがあり、それでもOleviewで表示できない可能性。

ただの大げさな推測ですが(提案するのが正しいかどうかはわかりません)、DLLに、見つけられない外部TLBを参照するtlbが含まれている可能性がありますか?

また、TLBには、OLEViewが単にダイジェストに失敗するサポートされていない(おそらくカスタムの)タイプが含まれている可能性があります。それは純粋にデュアルインターフェイスの種類のDLLですか?

于 2009-06-08T10:05:26.453 に答える
1

まず、ツールバーのボタンを押すのではなく、File->View Typelib でライブラリを開く必要があります。これは典型的なエラーです。

次に、リソースに typelib を使用せずにインプロセス COM サーバーを簡単に作成できますが、レイト バインディングとデフォルト マーシャリングは機能しません。外部で定義された一連のインターフェイス (たとえば、IFilter など) を実装し、誰も遅延バインディングも COM サーバーとのマーシャリングも使用しないことが確実にわかっている場合は、これを行うのが一般的です。

于 2009-06-08T10:17:20.063 に答える
0

タイプライブラリがOleViewで表示されない可能性があります。これは、世界で最も安定したソフトウェアではありません。これは、タイプライブラリがない、またはこのように定義されたインターフェイスが使用できないということではありません。

于 2009-06-08T10:05:01.587 に答える