title: How MSXML works ? (How in-process COM object works)
body: <p>I'm not expert in Component Object Model (COM), but from what I understand it works something like this:
  Program A (a "server" program) exposes COM interface lets say via TLB file.
  A client program uses this interface and call it's functions (and all the underlying stuff is done for you free of charge).
  So in this case when the "Server" program is running and "Client" program communicates with the "Server" using COM object.
  Each one of the programs (processes) has it own address space. 
  Now with MSXML it is a bit different.
  From what I understand, msxmlX.dll is a COM dll, but lets say when I implicitly link against it (using msxmlX.h and msxmlX.lib) during run time it's being loaded to the same memory space as my executable.
  So, in this case WHY COM object being used when there is clearly no IPC going on (both msxml.dll and "my app" are using the same memory and can "communicate" as simple as calling a function) ???</p>