I want to use the COM object with the progID Windows.Contact.1
via ActiveScripting (JScript, VBScript, Python, etc).
This COM resides in C:\Program Files (x86)\Common Files\System\wab32.dll
. It seems, there is no TypeLib available for it. The COM delivers, amongst others, IContact
for the "Windows Address Book" (storing contacts as XML in folders, as in Windows 7). IContact is documented here.
In JScript I did:
var co = new ActiveXObject("Windows.Contact.1");
typeof co; // results in: unknown
Since it results in unknown
, I have the suspicion, that this COM could not be usable for scripting. Somewhere I read, that everything, that inherits from IUnknown
can not be used for scripting, instead it must inherit from IDispatch
. But I am unsure, as to how much of this is valid, and whether there are workarounds.
I would like to ask for acknowledgement of my suspicions (since I am new to all of this and have no C++ or C# background) or to ask for a way, as to how to use Windows.Contact.1
from scripting, including a way, to find out, which methods/objects I can use, without resorting to a TypeLib.
I have access to pages like Programming Windows Contacts and related ones, but first I need to get an instance in ActiveScript (JScript, VBScript, Python, Lua will do). I also have access to applications like "MS OLE View" and "OLEView DotNet". Thank you.
There are entire books on the subject, but here's a very simplified story. There are basically 3 "categories" of COM interfaces:
Interfaces deriving from IUnknown
IUnknown-derived
interfaces (I'm not 100% sure) but supports .NET so it can use .NET as a "super wrapper".IDispatch
interface
IUnknown
well-known interface implementation: IDispatch
#import
directive). JScript and VBScript don't exactly support the same set of features with regards to Automation.VARIANT
, SAFEARRAY
, BSTR
which means "Basic String"...)IDispatch
implementation can be very dynamic and really late-bound at runtime (get id of name -> invoke) but most available programming tooling quite freezes the list of ids/names at compile time (ex: .NET) because they support Dual
interfaces.Dual
interfaces:
IDispatch-derived
interface and implement IDispatch
itself to match the custom interface (both implementations supposedly being "equivalent" of course). Have a look at the link below, it has nice images.IDispatch
, you're supposed to use only Automation compatible data types in the IDispatch
-derived method.IDispatch
wrappers) but you still have to digest automation data typesIMHO, one of the best 1-page introduction to COM is here: Introduction to COM