我何时为COM服务器生成新的GUID?(Python中的示例)

Ste*_*Lee 5 python com guid com-server

我是制作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
Run Code Online (Sandbox Code Playgroud)

示例场景2:

i)_reg_clsid_ = pythoncom.CreateGuid()
Run Code Online (Sandbox Code Playgroud)

示例场景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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Eri*_*own 2

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

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

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