Version 3.9
- Fixed defect where eval may trigger premature destruction of handle internal
  representation.
- Fixed COM server handling of byref BSTR and VARIANT parameters.
- Fixed invalid pointer error when Visual Studio automation object returns a
  VARIANT of type VT_DISPATCH with pointer set to NULL.
- Fixed incorrect type conversion when passing to SAFEARRAY(BYTE) parameter.
- Fixed memory corruption in handling of [out] DECIMAL parameters.
- Fixed Unicode encoding of ::tcom::ref getobject parameter.
- If an error occurs while executing a ::tcom::bind event handler command 
  then use the bgerror mechanism to report the error.
- Added ::tcom::variant command which creates VARIANT values.
- Added [::tcom::object null] command which returns a token representing a
  null IUnknown pointer.
- Added support for two-dimensional SAFEARRAY.

Version 3.8
- Fixed defect which prevented DISPATCH_PROPERTYPUTREF properties from being
  set.
- Fixed defect which incorrectly decremented reference count of interface
  pointers passed as method arguments.
- Fixed defect where only one argument was passed to methods marked with the
  [vararg] attribute.
- Fixed defect with handling of [out] SAFEARRAY parameters.
- Implemented work around for access violation when ::tcom::import command
  was used with Excel.
- Implemented work around for incorrect IDispatch implementation in Microsoft
  Word.

Version 3.7
- Fixed access violation in ::tcom::foreach command.

Version 3.6
- Prevent race conditions when local server registers multiple class objects.
- Added work around for bogus type information returned from IDispatch
  implemented by AutoDispatch in Microsoft .NET Framework.

Version 3.5
- Fixed defect where the code tried to invoke operations on pure dispatch
  interfaces by calling through the virtual function table.

Version 3.4
- Added -inproc, -local and -remote options to "::tcom::ref createobject"
  command.
- Fixed access violation when IDispatch objects return a null error
  description.
- The "::tcom::object create" and "::tcom::object registerfactory" commands
  accept the -registeractive option which registers the created COM object in
  the running object table.
- Added -inproc and -local options to "::tcom::server register" command.

Version 3.3
- The "::tcom::ref getobject" command now gets a reference to a COM object
  specified by a moniker name.  Added the "::tcom::ref getactiveobject"
  command which gets a reference to an existing COM object specified by a
  programmatic ID.
- Added -method, -get and -set options for invoking operations on IDispatch
  interfaces.
- Fixed defect where passing an interface pointer as an argument to a COM
  method caused Release to be called too many times on the interface pointer.

Version 3.2
- Fixed defect where ::tcom::foreach command called Release one too many times
  on the interface pointer to the collection object.
- The "::tcom::object create" command can now accept a list of imported
  interface names to implement.

Version 3.1
- Fixed access violation when formatting COM error message.
- Add clean up code to restore original Tcl cmdName type, so wish will not hang
  on exit.

Version 3.0
- Handles now automatically released.  Removed "::tcom::release" command.
- Added "::tcom::foreach" command which iterates through the elements of a
  COM collection.

Version 2.8
- Provide work around for dual interface objects that don't implement IDispatch
  correctly (such as Visual Studio).  Now references created by class commands
  generated by the ::tcom::import command will try to invoke operations through
  the virtual function table before trying through IDispatch.
- Fixed defect where only the last connection point is unadvised and released
  when more than one event sink is bound to an object reference.
- Added "::tcom::ref equal" command which test handles for COM identity.
- Added "::tcom::unbind" command which disconnects event sinks.
- VARIANT dates (VT_DATE) are now converted to Tcl double values.

Version 2.7
- Added support for one-dimensional SAFEARRAYs of primitive data types as
  method arguments.

Version 2.6
- Fixed type mismatch error when invoking methods with an [out] IDispatch
  parameter.
- Fixed bug where tcom server methods invoked through the virtual function
  table kept a reference to input COM interface pointer arguments.
- Fixed bug where Tcl error result formatting did not provide text
  descriptions of COM error codes on Windows 95.

Version 2.5
- Fixed bug where [out, retval] parameters were not treated as method return
  values.
- Fixed bug where property put functions could not be implemented because
  descriptions for those functions were discarded.

Version 2.4
- COM objects now run as in-process and local servers using the Tcl package
  mechanism to load object implementations.  Added the ::tcom::server command
  to register and unregister servers.
- The ::tcom::object create command now optionally specifies a Tcl command to
  execute when the object is destroyed.
- Removed the -register option from the ::tcom::object create command.  Now use
  the ::tcom::object registerfactory command to register a class factory.
- Deprecated -property option, which is now silently ignored.  MIDL should
  never allow a property and method to have the same name.

Version 2.3
- Fixed illegal memory access bug when importing type libraries.
- Fixed bug where strings passed in BSTR arguments were not converted from
  UTF-8.

Version 2.2
- Fixed bug where duplication method descriptions were stored when traversing
  inherited interfaces.
- Catch invalid callee error when a type library says that an object implements
  a dual interface when it actually doesn't.

Version 2.1
- Fixed bug where the ::tcom::import command did not read TKIND_DISPATCH type
  information.
- Fixed bug where parameters that were pointer types were treated as out
  parameters when they should have been in parameters.

Version 2.0
- The ::tcom::bind command now binds a Tcl command to events generated by an
  object.  Use the ::tcom::ref command now to create a reference to an object.
- The default concurrency model on Windows NT is now apartment threaded.
  Use the ::tcom::configure command to set the concurrency model.
- The ::tcom::import command now returns the library name stored in the type
  library file.

Version 1.11
- Fixed type mismatch error when calling an IDispatch method that returns
  a VARIANT of type VT_NULL.
- Convert boolean Tcl internal representation to VARIANT boolean type.
- Can now access properties of IDispatch implementations that describe their
  properties using the variable descriptions instead of the function
  descriptions in their type information.
- The object created by the ::tcom::object command now processes named
  arguments passed to its Invoke method by converting them into a Tcl list of
  argument names and values.

Version 1.10
- Fixed empty Tcl error message returned upon attempt to read a non-existent
  variable when passing an [in,out] argument.
- Fixed bug where the reference count of COM objects created by the
  ::tcom::object command can never be decremented to 0.
- Fixed passing of missing optional arguments.
- Added ismissing subcommand to ::tcom::na command.  This checks if an object
  is a missing argument token.

Version 1.9
- The life cycle of handle objects can be managed by multiple Tcl interpreters.
- Now convert Tcl int and long object types to VARIANT integer type when
  passing arguments.  This enables the use of integer values to index into
  collections.
- Replaced tlib2tcl.tcl script with ::tcom::import command.

Version 1.8

- Added -getobject option to ::tcom::bind command to get a reference to an
  existing object.
- Removed static initialization of C++ objects to allow the extension to use
  Tcl stubs.

Version 1.7

- Now you don't have to specify all the arguments when calling an object method.
  A VARIANT value denoting a missing value will be passed in place of the
  missing arguments.
- The ::tcom::bind command and class commands generated by tlib2tcl now accept
  the -withevents option to allow Tcl scripting of event sinks.
- Fixed the IDispatch server implementation to follow the correct memory
  management rules for events posted on the Tcl event queue.
- If the type information for the interface is available, the type 
  information will be attached to interface pointers returned from methods.

Version 1.6

- Added ::tcom::object command that allows IDispatch interfaces to be
  implemented in Tcl.
- The ::tcom::bind command now accepts the -clsid option for specifying a
  class by CLSID instead of programmatic ID.
- The tlib2tcl utility now puts the UUID of interfaces and classes into an
  array named __uuidof indexed by their name.
- Fixed COM interface pointer leak that occurred when a method returned an
  interface pointer.
- Made the code thread safe.

Version 1.5

- Added ::tcom::dispatch and ::tcom::na commands.
- Added sample Tcl script which shows how to create a spreadsheet by taking
  control of Excel.

Version 1.4

- Replaced "$interfaceInfo method" command with "$interfaceInfo methods" which
  returns a list of method descriptions.
- The tlib2tcl utility now generates Tcl code that requires the type library
  file at run time.
- Support Tcl 8.1 features:
  - A Tcl byte array argument passed to an interface method is converted to a
    one dimensional SAFEARRAY of bytes (VT_UI1).

Version 1.3

- Enhanced tlib2tcl to also generate Tcl arrays for enumerations defined in
  the type library.
- Class commands initialized object references with interface descriptions but
  the references discarded them on a createInstance.
- Now uninitialize COM when the Tcl interpreter is deleted.

Version 1.2

- Now allow property access using object reference command.
- Fixed array of VARIANT to Tcl list conversion.

Version 1.1

- The tlib2tcl utility was outputing "VOID" types as "unknown".
- Added tcom95.dll which does not use Windows NT specific COM features.
