我想通过ActiveScripting(JScript,VBScript,Python等)使用带有progID Windows.Contact.1
的COM对象。
此COM位于C:\Program Files (x86)\Common Files\System\wab32.dll
中。似乎没有TypeLib可用。 COM除其他外,还为“ Windows通讯簿” 提供IContact
(与Windows 7一样,将联系人存储为XML)。 IContact is documented here。
在JScript中,我做到了:
var co = new ActiveXObject("Windows.Contact.1");
typeof co; // results in: unknown
由于它导致unknown
,因此我怀疑该COM无法用于脚本编写。我在某处看到,从IUnknown
继承的所有内容都不能用于脚本编写,而是必须从IDispatch
继承。但是我不确定其中有多少有效,是否有解决方法。
我想对自己的怀疑表示感谢(因为我是所有这些人的新手,并且没有C ++或C#背景),或者想寻求一种方法,例如如何从脚本中使用Windows.Contact.1
,包括一种无需使用TypeLib即可找出可以使用的方法/对象的方法。
我可以访问诸如Programming Windows Contacts之类的页面以及相关页面,但是首先我需要在ActiveScript中获得一个实例(JScript,VBScript,Python,Lua可以使用)。我还可以访问“ MS OLE View” 和 "OLEView DotNet" 之类的应用程序。谢谢。
答案 0 :(得分:1)
关于该主题的整本书,但这是一个非常简单的故事。基本上有3种COM接口“类别”:
源自IUnknown
的接口
IUnknown-derived
接口(我不确定100%确定),但是支持.NET,因此它可以将.NET用作“超级包装器”。 IDispatch
界面
IUnknown
著名的接口实现:IDispatch
#import
指令这样的工具,并不是一件容易的事)。关于自动化,JScript和VBScript不完全支持同一组功能。VARIANT
,SAFEARRAY
,BSTR
,其意思是“基本字符串” ...)IDispatch
的实现是非常动态的,并且在运行时绑定得很晚(获取名称的id-> invoke),但是大多数可用的编程工具在编译时都会冻结ID /名称的列表(例如: .NET),因为它们支持Dual
接口。 Dual
界面:
IDispatch-derived
接口并实现IDispatch
本身以匹配自定义接口的IDispatch
,您应该在IDispatch
派生的方法中仅使用与自动化兼容的数据类型。IDispatch
包装器)来说要容易一些,但是您仍然必须消化自动化数据类型恕我直言,关于COM的最佳1页介绍之一是:Introduction to COM