2

VB6で生成されたCOMDLLを使用する.Net2C#アプリケーションを開発しています。VB DLLは頻繁に更新され、アプリケーションがSystem.Runtime.InteropServices.COMException(0x80040154)でクラッシュします。私が使用するCOMDLLの部分は変更されませんが、バージョン(およびCLSID)は変更されます。

参照の「特定のバージョン」オプションはfalseです。WrapperToolはtlbimpです。

DLLの変更を気にしないようにアプリケーションに指示するにはどうすればよいですか?使用している機能だけをチェックする方法はありますか?

4

1 に答える 1

2

これは、最も一般的なCOMエラーの1つである、「クラスが登録されていません」です。VB6から始まり、バイナリ互換性を制御するオプションがあります。私はそれがどのように見えるかを正確に忘れました、それは長すぎました。これを制御しない場合、VB6は異なるCLSID値で新しいCOMサーバーを作成します。これには、DLLをRegsvr32.exeに再登録する必要があります。そして、Tlbimp.exeを使用して相互運用ライブラリを再生成します。後者のステップはおそらくあなたが逃したものです。

異なるCLSID値を使用することは、COMの厳しい要件であることに注意してください。これは、パブリックインターフェイスが変更されたときに実行する必要があります。しかし、実装が変更されたときだけではありません。

于 2010-03-16T00:28:19.767 に答える