2013-10-05 28 views
5

我在做COM服务器,并从Python的COM工作新的,所以我想澄清一些事情,因为我无法找到明确的答案:何时为COM服务器生成新的GUID? (Python中的例子)

创建GUID的适当的COM服务器

如何生成:

  1. 的GUID我打算COM服务器手动,将它复制并使用#服务器从那时起吗?因此,当我分发应用程序时,其他用户将使用我在开发期间创建的相同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,以便我可以正确地与它进行交互?

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

回答

2

您绝对需要场景1.您应该在开发过程中生成一次一次,然后使用它,直到您更改您的类导出(到COM)的一组函数。

不仅可以您使用的CLSID跟踪的版本中,你必须改变每当你发布一个新版本,否则你打破COM identity rules的CLSID的;当调用你的对象进程时,违反规则通常会导致模糊的失败模式。

但是,通常,你不暴露的CLSID直接的代码,你暴露PROGIDs代替,这是嵌入式版本信息人类可读的字符串,并使用Win32 API CLSIDFromProgID两个之间的转换。 (VBA会为你做; Python也可能这样做)。

+0

链接是“等功能”文章。 – sharptooth

+0

谢谢,这正是我正在寻找的。我还没有找到身份规则文章,但MSDN的文章名为“GUID创建和优化”提供了有关此主题的其他内容:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686566%28v= vs.85%29.aspx –

+0

@SteveLee - 修复了链接。 –