2012-03-12 13 views
0

COMオブジェクトは、GUID、ProgIdなどの情報の束を介してシステムに登録されます。 TypeLibには、レジストリに書き込まれ、b)idlの中にあります。 私の質問は、COMオブジェクトを使用している/起動中に、システムによってバージョンフィールドが何らかの形でチェックされていることです。 など。 GUIDを変更せずにCOMオブジェクトの新しいバージョンを作成しても、バージョン番号を増やすと、これはどのような種類の不一致につながりますか?COMオブジェクトのバージョン番号とWinレジストリ経由でのハンドリング方法

GUIDを変更せずにバージョン番号を増やす理由は、インタフェースに触れることなくタイプライブラリのバグ修正です。

おかげ

+0

古いCOMオブジェクトと新しいCOMオブジェクトを1つのプロセスで並べて実行する予定ですか? – MSalters

+0

いいえ...古いdll(COM実装なので)が置き換えられます。 最後にCOMオブジェクトは1つしかなく、古いオブジェクトは上書きされます。 – Vegetico

+0

"COMオブジェクト"では、実際には 'CoCreateInstance'を介して作成されたものを意味しました。しかし、実行中のクライアントをシャットダウンすることは明らかです(使用中にDLLを上書きすることはできません)。 – MSalters

答えて

0

これはあなたの展開シナリオgven、問題にはなりません。 COMは一連の技術の包括的用語です。ほとんどの最低レベル*では、CoCreateInstanceはタイプライブラリなどの上位レベルの概念を気にしません。それはIClassFactory、特にそのCreateInstanceメソッドを気にします。 CoGetClassObjectの機能がIClassFactoryを取得したり、IClassFactory::CreateInstanceメソッドがtypelibのバージョン番号を使用したり、typelibが存在するとはみなされません。

*非常に低いレベルでは、クラスファクトリやCLSIDのないCOMオブジェクトを持つこともできますが、CoCreateInstanceでは作成できません。

関連する問題