The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl extension Win32::OLE.

Changes in version 0.01-0.03 are by Gurusamy Sarathy. All other changes
are by Jan Dubois unless attributed otherwise.

0.1007	Sun, April 25th, 1999
	- patches from ActiveState for sample code in OLE.pm POD section
	- Win32::OLE::Const now correctly treats version numbers as hex
	- use SvPV_nolen() where appropriate
	- Win32::OLE::NLS methods: SetLocaleInfo, SendSettingChange
	- Win32::OLE::Variant::Put returns $self for chaining
	- Win32::OLE::Variant::Put(ARRAYREF) implemented
	- Win32::OLE->WithEvents() function
	- new Win32::OLE::Variant methods: Currency/Date/Number/Time
	- AssignVariantFromSV() fixes for locale related VT_DATE/VT_CY problems
	- Win32::OLE::Variant::Get/Put fixed for VARIANT|BYREF pointing to ARRAY
	- several robustness enhancements to compensate for Perl's indeterminate
	  sequence of global object destruction
	- Win32::OLE->EnumAllObjects() function
	- t/6_event.t tests for WithEvents functionality
	- DCOM support in Win32::OLE->new() finally documented
	- GetObject and GetActiveObject now support optional DESTROY argument
	- OVERLOAD now works in DESTRUCTOR callback too
	- new file NEWS.pod describes user visible changes

0.1006	(unreleased)
	- replace many XSRETURN_UNDEFs by XSRETURN_EMPTY
	- various TypeInfo/TypeLib changes; Win32::OLE::GetTypeInfo() added
	- trial implementation of Win32::OLE::QueryInterface

0.1005	PRK update, ActivePerl 509
	- rearrange PL_* definitions for 5.004_05 compatibility
	- dependency on Win32::Registry removed. Win32::OLE::Const now uses XS
	  code to search the registry. Now only needs read access to registry.
	  Also reads the registry only once and caches typelibrary information.
	- Win32::OLE->GetActiveObject() and Win32::OLE->GetObject() methods now
	  also support an optional destructor as a 2nd argument.
	- Export SetSVFromVariantEx from DLL too. Change SetSVFromVariant() to
	  call SetSVFromVariantEx(..., bByRefObj=FALSE) instead of TRUE.
	- removed Typeinfo.pm from Makefile.PL/MANIFEST before sending to AS.

0.1004	(unreleased)
	- SetVariantFromSV calls VariantClear instead of VariantInit
	- new Win32::OLE::Variant $object->Copy() method
	- new Win32::OLE->Option() class method for CP/LCID/Warn access
	- removed COINIT_ALREADYINITIALIZED and __DisableOleInit
	- Win32::OLE::Variant->LastError added for backward compatibility
	  (it's now just a proxy for Win32::OLE->LastError)

0.1003	(included with ActivePerl 507)
	- Win32::OLE::Variant: Support for SAFEARRAYs (VT_ARRAY) added
	  New methods: Dim/Get/Put
	- SetSVFromVariantEx() can optionaly convert VT_BYREF variants to
	  Win32::OLE::Variant objects instead of simply dereferencing them
	- Win32::OLE::Variant "shares" class variables with Win32::OLE now
	- Initialize/Uninitialize/SpinMessageLoop reset LastError
	- EXPERIMENTAL ITypeInfo stuff
	- CP_MACCP, CP_UTF7, CP_UTF8 constants in OLE.pm
	- Win32::OLE::Enum::All converted to XS code. Enum.pm is now just POD
	- New Win32::OLE::Lite module which requires *no* additional modules
	- New COINIT_ALREADYINITIALIZED mode (and Win32::OLE::__DisableOleInit
	  constant) to disable COM initialization by Win32::OLE
	- {Ole|Co}Uninitialize() no longer called when the corresponding
	  Initialize didn't succeed

0.1002  (released by ActiveState with ActivePerl builds 505 and 506)
	- contains Win32::OLE::__DisableOleInit stuff ???

0.1001	(unreleased)
	- No longer needs XSLock(); all C functions now receive a pPerl pointer
	- Some functions exported for use by embedders (PerlSE, PerlCOM)
	- PPD entries added into Makefile.PL

0.10	Thu Sep 10 17:32:16 1998 (libwin32-0.14)
	- memory corruption fix (for ->SetProperty method) by Gurusamy Sarathy
	- document *nitialize(), SpinMessageLoop()

0.0902	(unreleased)
	- Allow specification of apartment model to Initialize() method. Special
	  case is COINIT_OLEINITIALIZE to fall back to OleInitialize(). This
	  is required to instantiate objects using compound document technology,
	  like e.g. "MAPI.Session".
	- Compatibility module now uses OleInitilize()

0.0901	(unreleased)
	- PL_na replaced by local variables
	- Dispatch method now accepts [wFlags, 'method'] to specify
	  various dispatch flags, e.g. DISPATCH_PROPERTYPUT
	- new $Obj->SetProperty() methods supports setting properties
	  with parameters
	- bug fix: the DCOM spec ['host', 'prog.id'] is no longer 'shifted'
	- more doc tweaks

0.09	(unreleased)
	- fix conversion from VT_DISPATCH/VT_UNKNOWN Win32::OLE::Variant objects
	  into Win32::OLE objects (were previously blessed into wrong class)
	- dynamically load CoInitializeEx to make OLE.dll compatible with 
	  "Win95 without DCOM" once again
	- convert Perl globals to PL_xxx form (with defines for Perl 5.004_xx)
	- minor doc tweaks
	- call CoFreeUnusedLibraries() whenever an OLE object is released

0.0810  (unreleased, maybe PRK for Win32 version, included by ActivePerl 501)
	- Removed USE_SV_PERINTERP, perl_atexit() only used for 5.004_68 and up

0.0809  (unreleased) identical to 0.0808

0.0808  (unreleased)
	- Introduced USE_SV_PERINTERP to switch off perl_atexit() usage

0.0807  (unreleased)
	- OleInitialize replaced by CoInitializeEx(NULL, COINIT_MULTITHREADED)
	  (as suggested by James Snyder). This gets rid of the hidden top-level
	  window problem.
	- Fixed warning in Win32::OLE::Const when called without arg

0.0806  (unreleased)
	- Bug fixes for IsLocalMachine()
	- Free per-interpreter memory area at interpreter-exit
	- Bootstrap no longer static function
	- Use MY_VERSION as key/variable name for per-interpreter data

0.0805  (unreleased)
	- Never do CLSID lookup by registry on local machine
	- try to use socket APIs too to determine host identity
	- make all globals per-interpreter variables / remove DllMain
	- proper per-interpreter cleanup for all Perl versions

0.0804  (unreleased)
	- Fix breakage in GetOleObject (from 0.0801) for 5.004_04 and earlier
	- Ignore DCOM hostname if it seems to be the local machine

0.0803  (unreleased)
	- Rearrange t/3_ole.t to behave nicely when Excel is not installed
	- Win32::OLE->Dispatch: only warn about unidentifiable method name
	  when C<use strict "subs"> is in effect (kind of)
	- Most error msgs and warnings are prefixed with Win32::OLE version#

0.0802  (unreleased)
	- Win32::OLE->new(['Machine', 'Prog.Id']) does a remote registry lookup
	  if the Prog.Id is not registered locally.
	- CLSCTX changed to CLSCTX_REMOTE_SERVER when a machine is specified.
	  Otherwise OLE would still prefer a local server when available

0.0801  (unreleased)
	- Win32::OLE::Tie::(FETCH|STORE) now interpret $^H correctly
	- removed all Perl related stuff from DllMain (for embedded stuff)
	- Additional checks in GetOleObject for Perl 5.004_05 or later

0.08    Mon May 11 03:36:49 1998
	- Make sure mg_get() gets called during GetOleObject()

0.0615  (unreleased)
	- use SvIMMORTAL instead of SvREADONLY where applicable
	- use newCONSTSUB in Win32::OLE::Const to define inlineable functions

0.0614  (unreleased)
	- devel/dumprot.cpp removed, use IROTVIEW instead :-)
	- COSERVERINFO hack removed, requires MSC++ 4.2b or later now

0.0613  (unreleased)
	- WinOleEnum objects where never Safefree()d before
	- New Initialize/Uninitialize class methods. Uninitialize zombifies all
	  OLE objects and then calls OleUninitialize.

0.0612  (unreleased)
	- new Win32::OLE->SpinMessageLoop() class method
	- Messageloop will be emptied before OleUnitialize is called
	  (thanks to Steve Glassman for finding this problem!)

0.0611  (unreleased)
	- Win32::OLE::Tie::Store use DISPATCH_PROPERTYPUTREF for objects
	  (as suggested by Steve Biondi)
	- all OLE calls now automatically reset LastError
	- added devel/dumprot.cpp tool to distribution

0.0610  (unreleased)
	- Win32::OLE::Const now loads consts from all TKINDs and not only ENUMs
	- Win32::OLE::Variants are actually freed during DESTROY now
	- Misc. robustness fixes (VariantClear etc.)

0.0609  (unreleased)
	- Win32::OLE::LastError() returns $Win32::OLE::LastError
	- misc COSERVERINFO fixes

0.0608  (unreleased)
	- use scode from excepinfo structure when available instead 
	  of DISP_E_EXCEPTION (as suggested by Steve Glassman)
	- misc. Get(WideChar|MultiByte) robustness enhancements
	- Win32::OLE::new now uses CLSTLX_SERVER
	-         "       allows specification of remote server name
	-         "          "         "       of numeric class id

0.0607  (unreleased)
	- enhanced C<in> allows multiple args and supports array refs too
	- SetSVFromVariant array bug fixes
	
0.0606  (unreleased)
	- use SvTRUE instead of SvIV to convert SV to VARIANT
	- REFCNT of returned SV for VT_ARRAY variant is now set correctly
	- SAFEARRAYs of VT_DISPATCH and VT_BSTR (and VT_VARIANT containing
	  those) are now handled correctly
	- folding of SAFEARRAYs removed again. Original structure is maintained
	  t/3_ole.t adjusted accordingly
	- Win32::OLE::Enum->All doesn't call Reset anymore

0.0605  (unreleased)
	- Property enumeration now dereferences TKIND_COCLASS etc.
	- Overloading in Win32::OLE now only enabled by OVERLOAD pseudotarget
	- Win32::OLE::CreateObject function for compatibility w/"Learning Perl"
	- Win32::OLE->LastError returns a dual value now (IV and PV)
	- Removed unsupported TKIND_ and VT_ constants from Win32::OLE::Variant
	- lcidDefault changed back to LOCALE_SYSTEM_DEFAULT, the language
	  neutral setting didn't allow portable scripts either
	- Sample file type converter script in eg/word2xxx.pl
	- valof uses CP and LCID of arg class for variant conversion

0.0604  (unreleased)
	- New package variable Win32::OLE::Tie specifies 'Win32::OLE::Tie' class
	- Win32::OLE::Tie FIRSTENUM/NEXTENUM added for compatibility mode
	- Win32::OLE::Tie STORE/FETCH renamed. Added default method argument
	- Default method retries enabled under C<no strict 'subs';> only
	- New C<in> function; C<With> renamed to C<with>
	- Const module now defines xlConstant instead of $xlConstant
	- multi-dimensional arrays are folded to lower dimensions if possible
	  (e.g. 1x1 array -> scalar, 1x5 array -> list of 5, 5x1 -> unchanged)
	- new regression tests: unicode, variant
	- new sample: eg/word2pod.pl
	- first cut of NLS.pm module
	- compiles and tests ok with 5.004_60 built with -DUSE_THREADS
	- new C<valof> function
	- Win32::OLE objects overloaded conversion to strings and numbers

0.0603  (unreleased)
	- Win32::OLE::Enum::Count method removed
	- SetSVFromVariant now works with SAFEARRAYs of non-VARIANT types too
	- Onedimensional SAFEARRAY of UI1s converted to SvPV
	- OLE, Enum and Variant objects all linked in g_pObj chain
	- g_pObj chain protected by critical section to make it thread safe
	- New package variables $CP,$LCID for Win32::OLE and Win32::OLE::Variant
	- default lcid changed from LOCALE_SYSTEM_DEFAULT -> language neutral
	- LastOleError is stored in a package variable $LastError now
	- Error reporting now controled by $Warn package variable
	- Win32::OLE::Variant: new As,ChangeType,Type,Unicode,Value methods
	- Win32::OLE::Variant overloaded "" and 0+ operations
	- Preliminary Variant BYREF support
	- Dispatch can return Win32::OLE::Variant objects too
	- Compatibility package "OLE" created
	- Invoke method added, supports default method too
	- Memory leaks
	- "keys %$object", QueryObjectType and Win32::OLE::Const::Load no
	  longer croak when the GetTypeInfo is unavailable or returns 0
	- Enum::new returns undef if object is not a valid collection object

0.06  Fri Feb  6 21:13:20 1998
	- bugfix: DoCroak uninitialized variable
	- Multidimensional arrays can now be sent and received

0.05  Sun Dec 14 21:13:11 1997
	- All OLE errors are caught and a verbose error message is provided
	  through Carp::croak (if -w is in effect)
	- Internal errors will no longer be silently ignored; they'll croak now
	- All hardcoded buffer size limits removed from XS code
	- Collection support is fixed and moved into Win32::OLE::Enum
	- C<keys %$object> now enumerates the objects properties
	- Win32::OLE::Const module imports constants from type libraries
	- Moniker support through Win32::OLE->GetObject
	- Win32::OLE->GetActiveObject finds active instance of OLE server
	- Variants moved to Win32::OLE::Variant module; enhanced functionality
	- Win32::OLE->QueryObjectType return typelib name and class name of
	  object

0.04  Sun Oct 12 23:03:32 1997 (unreleased)
	- support for unnamed default methods (thanks to
	  Doug Lankshear <Doug_Lankshear@ActiveState.com>)
	- CreateVariantFromSV is more robust now
	- support for omitting optional params with "undef"
	- named arguments can be specified as a hash ref
	- array elements are now properly typed (used to be always text)
	- additions to testsuite
	- With() utility method suggestion
	- optional DESTROY method arg for Win32::OLE->new
	- Win32::OLE::CreateObject renamed to Win32::OLE::new
	  old Perl new() method deleted
	- Hardcoded package names gone, so inheritance is feasible now

0.03  Sat Jul 12 16:10:07 1997
	- DllEntryPoint for Borland

0.02  Sat May 10 15:40:52 1997
	- cleaned up one big memory leakathon (DESTROY actually gets
	  called now on all the objects)
	- back to XS
	- package names are Win32::OLE and Win32::OLE::Tie now
	- fixed misplaced DESTROY
	- implemented OLEUninitialize via DllMain

0.01  Sat Apr  5 14:23:42 1997
	- original version; created by h2xs 1.18
	- imported Activeware version