特定の GUID A を持つ dcom オブジェクトをインスタンス化する Windows サービスがあります。
その dcom オブジェクトを新しいバージョンに置き換える必要があります。置換 dcom オブジェクトを作成してコンパイルすると、GUID B で作成されます。
置換 dcom オブジェクトの guid を guid B から guidA に変更するにはどうすればよいですか?
「サーバー」側 (その特定のクラスを発行する DLL またはアプリケーション) で ID を変更しようとしている場合、VB は、プロジェクト プロパティの「コンポーネント」タブで「互換性なし」を選択すると、変更を行います。
「クライアント」(別の dll/アプリによって発行されたクラスを使用する DLL またはアプリケーション) でインスタンス化されているオブジェクトを変更しようとしている場合は、参照を変更する必要があります (参照またはコンポーネントによって異なります)。これにより、新しいバージョンのサーバー (更新された GUID を持つクラスを公開するもの) を指すことができます。これは、現在の参照を削除し、新しいサーバーへの参照を追加することを意味します。名前が変更されていなければ、他のすべては以前と同じように機能するはずです。明らかに、クラスのインターフェースの変更はわずかです。
私の知る限り、VB6 の GUID に直接アクセスすることはできません。
アプリケーション(置換DCOMオブジェクト)を既存のdllとバイナリ互換になるようにコンパイルする必要があります。そうすれば、同じGUIDを継承し、バージョン番号が増加します。既存のDCOMdllを置き換えて上書きすると、すべてが機能するはずです。
たとえば、VB6では、プロジェクトダイアログ設定でバイナリ互換性を指定できます。C ++のどこに設定したかわからないので、GUIDはソースコードに埋め込まれていると思います。
置換 DCOM オブジェクトを再コンパイルし、Guid A を使用することに成功しました ...
VB が exe ファイルを置き換えるときに、GUID を探し、それを再コンパイルされたバージョンに再利用すると思います。