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.