What is ActiveX, COM, Automation and such?

This is a collection of notes, quotes and links relevant to Microsoft's definition and explanation of ActiveX, COM, Automation and such. It seems to me that Microsoft does not define the terms clearly and makes the definitions more confusing by using the terms inconsistently. Initially the contents of this page will be quite disorganized and incomplete.

Dual Attribute

In the documentation of the dual attribute (I should have a link to that) it says "The dual attribute creates an interface that is both a Dispatch interface and a Component Object Model (COM) interface.".

Types of Binding

It is unclear to me whether a client obtains type information when it uses VTBL binding.

Marshals

Microsoft uses the term "Marshal" extensively. The meaning of the term as used most commonly by people in general is as a legal term. As used legally, a marshal is a law-enforcement type of person, as in the following:

That is not the meaning of the term as used by Microsoft in the context of COM, Automation, ActiveX and address spaces. In those contexts, a marshal is more like a moving company; in other words, people with trucks that come to a home or business and put things into boxes and put the boxes and furniture into a truck. Then they drive the truck elsewhere and do the reverse of the process at the other end. In the context of COM, Automation, ActiveX and address spaces, a marshal transfers data from one place to another.

Automation by Dr. GUI

Confusion

The following is from Dr. GUI and COM Automation, Part 1.Under "Automation: And Now for Something Completely Different" it says:

Automation (formerly known as OLE Automation) is a totally different method for clients to call servers compared to the standard COM vtable interfaces that we've seen so far.

Automation uses the standard COM interface IDispatch to access the object's Automation interface. Therefore, we say that any object that implements IDispatch implements Automation. Note that our two previous ATL objects both use dual interfaces, in which a working IDispatch interface that matches the custom interface you write is provided to you by ATL and COM.

Then in "Why Automation?" it says:

Visual Basic's first 32-bit version used Automation to access OLE controls (now called ActiveX controls), which replaced 16-bit Visual Basic's VBX controls. Visual Basic can still use Automation to access a control's properties and methods, but more recent versions also support using standard COM vtable interfaces. The examples we created in previous columns all used the early-bound vtable interfaces, which give better performance than Automation interfaces. The examples we create this time will use Automation interfaces.

Scripting languages, such as Visual Basic for Applications, VBScript, and J/Script, use Automation exclusively. So if you want your object to be usable by scripting languages, you need to implement an Automation interface.

This is confusing and seems inconsistent but I admit I skipped over the previous articles so I need to go back and read the previous articles.

Explanation

The following is also from Dr. GUI and COM Automation, Part 1.Under "The Difference Between COM Interfaces and Automation" it says:

So I will be looking for more to read about that.


See my Visual C++ Programmer Stuff page for more C++ stuff.