5

我是制作 COM 服务器和从 Python 使用 COM 的新手,所以我想澄清一些我找不到明确答案的事情:

为 COM 服务器正确创建 GUID

我是否生成:

  1. 我的预期 COM 服务器的 GUID 手动复制它并从那时起将 # 用于服务器?因此,当我分发应用程序时,其他用户将使用我在开发期间创建的相同 GUID。

  2. 每次初始化应用程序或 COM 服务器对象时都有一个新的 GUID?

  3. 每台计算机都有一个新的 GUID,在初始设置期间只有一次,然后让应用程序保存 GUID # 并在未来加载时从用户设置文件中提取该 #?

示例场景 1:

i)  print(pythoncom.CreateGuid())   #in interpreter
ii) _reg_clsid_ = copy  above GUID into your app

示例场景 2:

i)_reg_clsid_ = pythoncom.CreateGuid()

示例场景 3:

if self.isfile = os.path.isfile(url):
    load_previous_generated_GUID(url)
else:
    #first time running application or setup file is missing
    GUID = pythoncom.CreateGuid()
    save_GUID_to_setup_file(GUID)

我可以使用 GUID 来跟踪程序/COM 服务器版本吗?

如果上面的场景 #1 是正确的,那么:当我进行升级时,我可以测试旧的 GUID,以便我可以正确地与之交互?

TODO:如何从 Python 和/或 VBA 获取 COM 服务器的 GUID?

4

1 回答 1

2

您肯定需要方案 1。您应该在开发期间生成一次 CLSID 并使用它直到您更改类导出的函数集(到 COM)。

不仅可以使用 CLSID 来跟踪版本,而且每次发布新版本时都必须更改 CLSID,否则会破坏COM 身份规则;在进程外调用对象时,违反规则通常会导致模糊的失败模式。

但是,通常情况下,您不会将 CLSID 直接公开给代码,而是公开PROGID,它们是具有嵌入式版本控制信息的人类可读字符串,并使用 Win32 API CLSIDFromProgID在两者之间进行转换。(VBA 会为你做这个;Python 也可以做这个。)

于 2013-10-06T02:03:27.670 回答