手動の手順が多数含まれているため、見落としがちです。タイプ ライブラリをどのようにインポートしたかによって異なります。複数の方法があります。[参照の追加 + COM] タブから参照を選択した場合、新しい COM サーバーを再登録するのを忘れている可能性があります。または、誤って新しいものではなく古いものを選択してしまいました。これは、必要に応じて GUID を変更し、古いものをクリーンアップするのを忘れた場合に発生する可能性があります。クリーンアップは非常に重要ですが、COM サーバーを再構築する前に行う必要があるため、見落としがちです。レジストリに大量のゴミが残る可能性があります。
確かに、Tlbimp.exe を直接使用することが、事故を回避するための最も信頼できる方法です。タイプライブラリで直接実行し、レジストリをまったく使用しないためです。
トラブルを最小限に抑えるためのレシピは次のようになります。
- 最初に regsvr.exe -u を実行して、古い COM サーバーの登録を解除します。
- 古い DLL ファイルと TLB ファイルを削除します。
- IDL を変更して新しいメソッドを追加します
- 変更したインターフェースに新しい IID を割り当てます
- インターフェイスを使用するコクラスに新しい CLSID を割り当てます
- ライブラリのバージョンをインクリメントする
- 出力 DLL の名前を変更します。名前にメジャー バージョンとマイナー バージョンを含めることをお勧めします。
- 新しい COM サーバーを構築する
- regsvr32.exe でサーバーを登録する
- Tlbimp.exe を実行して相互運用ライブラリを生成する
- .NET プロジェクトの古い相互運用ライブラリへの参照を削除します
- [参照の追加] + [参照] を使用して、新しい相互運用ライブラリを追加します
これらの手順のいずれかをスキップすると、ビルドの問題、レジストリの汚染、DLL 地獄が発生し、何もせずに大破した 1 日を過ごす可能性があります。