pythoncom.CoCreateInstance无法创建IZoneIdentifier;尽管MSDN中有文档记录,但注册表中也缺少该接口

2024-06-26 00:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python实现Manipulating the zone identifier to specify where a file was download from – The Old New Thing - MSDN blogs。在

CoCreateInstance

pythoncom.CoCreateInstance(
        pywintypes.IID('{0968e258-16c7-4dba-aa86-462dd61e31a3}'),    #CLSID_PersistentZoneIdentifier
        None,pythoncom.CLSCTX_ALL,
        pywintypes.IID('{cd45f185-1b21-48e2-967b-ead743a8914e}'))    #IID_IZoneIdentifier

我得到一个错误:

^{pr2}$

(没有stacktrace,因为这是一个扩展函数)

如果使用相同的

实际上,在HKCR\Interface中,我没有看到像IZoneIdentifier那样的东西,但确实看到了IPersistFile。在


在反汇编了urlmon.dll之后,我看到它确实实现了接口,但没有在其DllRegisterServer中注册它。进一步搜索,我发现IPersistFile正在由ole32.dll注册,而不是{}。在

MSDN将此接口记录为自IE6以来可用。但IE7和IE8都没有。因为这是XP(以及所有据称的更新),我没有其他的东西可以尝试。在

同样,在WindowsSDK7.0中,MSDN文章中提到的urlmon.h文件中也有该接口。在

问题是:

  • 这个接口是不是悄悄地放弃了,转而支持其他东西,而MSDN没有反映这一点或其他什么?或者,这是一个已知的问题吗?它在IE的更高版本中可用吗?在
  • ole32.dllurlmon.dll属于哪些组件(以便我可以尝试(取消)为它们安装更新)?在

Tags: thezonedllidentifiermanipulatingmsdniid试图用
1条回答
网友
1楼 · 发布于 2024-06-26 00:25:03

IZoneIdentifier没有问题。原来的C++程序运行得很好。作为@IgorTandetnik pointed out,并不是对象实现的每个接口都要在注册表中注册,只有那些支持封送的接口才会注册。在

错误来自pythoncom本身(提示是它是TypeError,而不是{},错误消息总是用英语而不是系统的UI语言)。在

原因是pythoncom确实需要接口的IDispatch支持,否则就无法推断出如何使用接口的函数和它们接受/返回的值。在

唯一的例外是许多基于IUnknown的接口,对这些接口的支持是在(IPersistFile中编译的;显然,完整的列表在pythoncom.InterfaceNames中)。在

对其他基于IUnknown的接口的支持可以添加到“pythoncom扩展”模块中。关于它们的一些(非常稀少)文档可以在Python and COM - Implementation Details文章中的pywin32文档中找到。在

相关问题 更多 >