2012-02-15 3 views
2

私はC#dllを持っており、regasmを使ってtlbを生成します。私は、このtlbを使用するユーザにユーティリティスプレッドシートを与えました。 tlbは登録解除され、アプリケーションの新しいバージョンがリリースされるたびに(regasm.exeを使用して)登録されます。Tlbの新しいバージョンをリリースし、Tlbを再参照する必要がある場合

しかし、新しいリリースの後にユーザーがスプレッドシートを使用しているときに、タイプのオブジェクトを作成するコード行に 'アクティブなコンポーネントはインスタンスを作成できません'というエラーがスローされます。私はtlb参照を削除して追加するだけでこれを修正します。 (vbaモード - ツール - リファレンス - tlb-saveのチェックを外し、再度追加します)。しかし、これはすべてのユーザーにとってこれを行うことができないので、苦しいです。

シナリオを再現するためにいくつかのテストを行いました。 DLLのバージョン番号を変更して再登録する、インターフェイスに新しいメソッドを追加して再登録するなど。しかし、すべての場合、スプレッドシートは、tlb参照を削除して再追加することなく正常に動作します。

だから、スプレッドシートでtlbを参照として再追加する必要があるシナリオと、その原因となる可能性があるのは混乱しています。どんな助けもありがとうございます。

おかげで、 マニ

答えて

2

問題が最も可能性の高いタイプライブラリの変更のUUIDとVBAでの参照が無効になることに起因します。

1)そこに、VBA program to add TLB references and delete invalid onesを書きました!

2)これは、古いバージョンをアンインストールしてから新しいバージョンをインストールするという事実に関連している可能性があります。 RegAsm's manualには逆の順序が記載されています。 VBAには、それらを更新するいくつかのロジックがある可能性があります。 gこれは、M $人が念頭に置いていた更新順序でのみ機能します。
もう1つの可能性は、更新中にExcelが実行されているため、想定されたときに参照リストを更新しなかったことです。

3)さらに問題を診断するには、procmon.exeを使用します。 COMに関するすべてがレジストリ内で検索されるので、エラーが発生した場合は、おそらくアプリがUUIDキーを見つけることができなくなるでしょう。

+0

間違いなく有用です。 –

+0

これがなぜ起こるのか他の可能な理由は見当たらないので、答えとして受け入れます。このツールは便利で、procmonが役に立ちます。しかし、これを解決できる1つの修正がまだまだわからない。 –

関連する問題