0

我有一个 Windows 服务,它使用某个 guid A 实例化一个 dcom 对象。

我需要用新版本替换那个 dcom 对象。当我创建和编译我的替换 dcom 对象时,它是使用 guid B 创建的。

如何将替换 dcom 对象的 guid 从 guid B 更改为 guidA?

4

3 回答 3

2

如果您尝试更改“服务器”端的 ID(发布该特定类的 DLL 或应用程序),当您在项目属性的“组件”选项卡中选择“不兼容”时,VB 会为您执行此操作。

如果您尝试更改在“客户端”(使用由另一个 dll/app 发布的类的 DLL 或应用程序)中实例化的对象,则需要更改引用(通过引用或组件,具体取决于我们正在谈论什么样的对象),以便您指向新版本的服务器(使用更新的 GUID 发布他的类的那个)。这意味着删除当前引用并添加对新服务器的引用。如果名称没有改变,其他一切都应该像以前一样工作,显然类的接口有微小的变化。

据我所知,您无法直接访问 VB6 中的 GUID。

于 2009-05-26T19:17:42.303 回答
0

我设法重新编译了我的替换 DCOM 对象并让它使用 Guid A...

  1. 从注册表中删除所有对 Guid B 的引用
  2. 删除我的替换 DCOM 对象 exe 文件
  3. 复制原DCOM exe文件
  4. 将原来的 DCOM exe 文件重命名为替换名称
  5. 重新编译vb项目

我猜当 VB 替换 exe 文件时,它会查找 GUID,然后将其重用于重新编译的版本。

于 2009-05-26T19:51:47.557 回答
0

您应该将您的应用程序(替换 DCOM 对象)编译为与现有 dll 二进制兼容,这样它将继承相同的 GUID 并且版本号将增加。如果你用替换覆盖现有的 DCOM dll,一切都应该工作。

例如,在 VB6 中,您可以在项目对话设置中指定二进制兼容性。不确定你在哪里为 C++ 设置它,我认为 GUID 嵌入在源代码中。

于 2009-05-29T07:36:44.970 回答