我是制作COM服务器和从Python使用COM的新手,所以我想澄清一些我找不到明确答案的事情:
为 COM 服务器正确创建 GUID
我是否生成:
-
手动为我预期的COM服务器提供GUID,复制它并从此将该#用于服务器?因此,当我分发应用程序时,其他用户将使用我在开发期间创建的相同 GUID。
-
每次初始化应用程序或 COM 服务器对象时都有新的 GUID?
-
基于每台计算机的新 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?
你肯定想要场景 1。 应在开发过程中生成一次 CLSID,并使用该函数,直到更改类导出的函数集(到 COM(。
不仅可以使用 CLSID 跟踪版本,还必须在发布新版本时更改 CLSID,否则会破坏 COM 标识规则;违反规则通常会导致在进程外调用对象时出现模糊的失败模式。
但是,通常情况下,您不会直接向代码公开 CLSID,而是公开 PROGID,它们是具有嵌入式版本控制信息的人类可读字符串,并使用 Win32 API CLSIDFromProgID 在两者之间进行转换。 (VBA将为您执行此操作;Python也可以这样做。