2009-06-08 13 views
4

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

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

実際に私はoleviewからそのDLLのエラーメッセージ "error loading type library"を開こうとしています。

私は、DLLから公開されたインターフェイスを持っているかどうか分かっているので、oleviewで開く必要があります。それ以外のインターフェイスや関数は公開できません。

私たちには、インターフェイスを公開するDLLがあり、それでもOleviewでは表示できない可能性があります。

+0

dllによって公開されているインターフェイスを教えることができるoleview以外のツールはありますか? – anand

答えて

0

タイプライブラリがOleViewによって閲覧不可能になる可能性があります。これは世界で最も安定したソフトウェアではありません。これは、型ライブラリが存在しないこと、またはこのように定義されたインタフェースが使用不可能であると言うことではありません。

1

...それはいくつかのDLLがまだ タイプライブラリとして宣言 とすることなく、インタフェースを公開することが可能です。

はい。あなたはtlbを持たないCOM DLLを持つことができます(VC++がATLプロジェクトでデフォルトであなたのために製造するものではありませんが)。我々はまだDLL さらすのインタフェースを持っており、

任意の可能性が はOLEVIEWによって表示することはできません。

あなたのDLLには、見つからない外部TLBを参照するtlbが含まれている可能性がありますか?

また、TLBには、サポートされていない(おそらくカスタム)タイプが含まれていて、OLEViewが単に消化できない場合があります。純粋にデュアルインターフェイスのDLLですか?

1

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

これで、リソースにタイプライブラリを持たないIn-proc COMサーバーを簡単に作成できますが、レイトバインドと既定のマーシャリングは機能しません。それ以外の場合は正常に機能します。典型的には、IFilterのような外部定義のインターフェイスを実装し、COMサーバーとの遅延バインディングもマーシャリングも使用しないことを確認するのが一般的です。

3

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

スクリプト互換コンポーネント(IDispatch、IDispatchEx)は実行時の情報しかサポートしないことがあるので、通常、ベアボーンタイプのライブラリが含まれているか、まったく含まれていないことに注意してください。しかし、これらのインターフェイスを公開するコンポーネントでは、これらのインターフェイスを介して情報を調べることができます。

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

関連する問題