我有一个 Windows 服务,它使用某个 guid A 实例化一个 dcom 对象。
我需要用新版本替换那个 dcom 对象。当我创建和编译我的替换 dcom 对象时,它是使用 guid B 创建的。
如何将替换 dcom 对象的 guid 从 guid B 更改为 guidA?
如果您尝试更改“服务器”端的 ID(发布该特定类的 DLL 或应用程序),当您在项目属性的“组件”选项卡中选择“不兼容”时,VB 会为您执行此操作。
如果您尝试更改在“客户端”(使用由另一个 dll/app 发布的类的 DLL 或应用程序)中实例化的对象,则需要更改引用(通过引用或组件,具体取决于我们正在谈论什么样的对象),以便您指向新版本的服务器(使用更新的 GUID 发布他的类的那个)。这意味着删除当前引用并添加对新服务器的引用。如果名称没有改变,其他一切都应该像以前一样工作,显然类的接口有微小的变化。
据我所知,您无法直接访问 VB6 中的 GUID。
我设法重新编译了我的替换 DCOM 对象并让它使用 Guid A...
我猜当 VB 替换 exe 文件时,它会查找 GUID,然后将其重用于重新编译的版本。
您应该将您的应用程序(替换 DCOM 对象)编译为与现有 dll 二进制兼容,这样它将继承相同的 GUID 并且版本号将增加。如果你用替换覆盖现有的 DCOM dll,一切都应该工作。
例如,在 VB6 中,您可以在项目对话设置中指定二进制兼容性。不确定你在哪里为 C++ 设置它,我认为 GUID 嵌入在源代码中。