我想通过ActiveScripting(JScript,VBScript,Python等)将COM对象与progID Windows.Contact.1
一起使用。
此COM位于C:\Program Files (x86)\Common Files\System\wab32.dll
中。似乎没有TypeLib可用。除其他外,COM为“ Windows通讯簿”提供IContact
(将联系人作为XML存储在文件夹中,如Windows 7中一样)。 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"之类的应用程序。谢谢。
有关于该主题的整本书,但这是一个非常简单的故事。 COM接口基本上有3个“类别”:
源自IUnknown
的接口
IUnknown
(我不是100%肯定),但是支持.NET,因此它可以将.NET用作“超级包装器”。IDispatch
接口
IUnknown
众所周知的接口实现:IDispatch
#import
指令这样的工具并不是一件容易的事)。关于自动化,JScript和VBScript不完全支持同一组功能。VARIANT
,SAFEARRAY
,BSTR
,表示“基本字符串” ...)IDispatch
实现可能非常动态,并且在运行时实际上是后期绑定(获取名称的ID->调用),但是大多数可用的编程工具在编译时都会冻结ID /名称的列表(例如:.NET)因为它们支持Dual
接口。Dual
接口:
IDispatch-derived
接口并实现IDispatch
本身以匹配自定义接口的接口(当然,这两个实现都应该是“等效的”)。看看链接,它有漂亮的图像。IDispatch
,您应该在IDispatch
派生的方法中仅使用与自动化兼容的数据类型。IDispatch
包装器,但是您仍然必须摘要自动化数据类型恕我直言,关于COM的最佳1页介绍之一在这里:Introduction to COM