# The documentation is at the __END__ package Win32::OLE; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK @EXPORT_FAIL $AUTOLOAD $CP $LCID $Warn $LastError); $VERSION = '0.1005'; use Carp; use Exporter; use DynaLoader; @ISA = qw(Exporter DynaLoader); @EXPORT = qw(); @EXPORT_OK = qw(CP_ACP CP_OEMCP CP_MACCP CP_UTF7 CP_UTF8 in valof with OVERLOAD DISPATCH_METHOD DISPATCH_PROPERTYGET DISPATCH_PROPERTYPUT DISPATCH_PROPERTYPUTREF); @EXPORT_FAIL = qw(OVERLOAD); sub export_fail { shift; if ($_[0] eq 'OVERLOAD') { shift; eval <<'OVERLOAD'; use overload '""' => \&valof, '0+' => \&valof, fallback => 1; OVERLOAD } return @_; } unless (defined &Dispatch) { # Use regular DynaLoader if XS part is not yet initialized bootstrap Win32::OLE; require Win32::OLE::Lite; } 1; ######################################################################## __END__ =head1 NAME Win32::OLE - OLE Automation extensions =head1 SYNOPSIS $ex = Win32::OLE->new('Excel.Application') or die "oops\n"; $ex->Amethod("arg")->Bmethod->{'Property'} = "foo"; $ex->Cmethod(undef,undef,$Arg3); $ex->Dmethod($RequiredArg1, {NamedArg1 => $Value1, NamedArg2 => $Value2}); $wd = Win32::OLE->GetObject("D:\\Data\\Message.doc"); $xl = Win32::OLE->GetActiveObject("Excel.Application"); =head1 DESCRIPTION This module provides an interface to OLE Automation from Perl. OLE Automation brings VisualBasic like scripting capabilities and offers powerful extensibility and the ability to control many Win32 applications from Perl scripts. The Win32::OLE module uses the IDispatch interface exclusively. It is not possible to access a custom OLE interface. OLE events and OCX's are currently not supported. =head2 Methods =over 8 =item Win32::OLE->new(PROGID [, DESTRUCTOR]) OLE Automation objects are created using the new() method, the second argument to which must be the OLE program id or class id of the application to create. Return value is undef if the attempt to create an OLE connection failed for some reason. The optional third argument specifies a DESTROY-like method. This can be either a CODE reference or a string containing an OLE method name. It can be used to cleanly terminate OLE objects in case the Perl program dies in the middle of OLE activity. The object returned by the new() method can be used to invoke methods or retrieve properties in the same fashion as described in the documentation for the particular OLE class (eg. Microsoft Excel documentation describes the object hierarchy along with the properties and methods exposed for OLE access). Optional parameters on method calls can be omitted by using C as a placeholder. A better way is to use named arguments, as the order of optional parameters may change in later versions of the OLE server application. Named parameters can be specified in a reference to a hash as the last parameter to a method call. Properties can be retrieved or set using hash syntax, while methods can be invoked with the usual perl method call syntax. The C and C functions can be used to enumerate an object's properties. Beware that a property is not always writable or even readable (sometimes raising exceptions when read while being undefined). If a method or property returns an embedded OLE object, method and property access can be chained as shown in the examples below. =item Win32::OLE->GetActiveObject(CLASS) The GetActiveObject class method returns an OLE reference to a running instance of the specified OLE automation server. It returns C if the server is not currently active. It will croak if the class is not even registered. =item Win32::OLE->GetObject(MONIKER) The GetObject class method returns an OLE reference to the specified object. The object is specified by a pathname optionally followed by additional item subcomponent separated by exclamation marks '!'. =item Win32::OLE->Initialize(COINIT) The C class method can be used to specify an alternative apartment model for the Perl thread. It must be called before the first object is created. Valid values for COINIT are: Win32::OLE::COINIT_APARTMENTTHREADED - single threaded Win32::OLE::COINIT_MULTITHREADED - the default Win32::OLE::COINIT_OLEINITIALIZE - single threaded, additional OLE stuff COINIT_OLEINITIALIZE is sometimes needed when an OLE object uses additional OLE compound document technologies not available from the normal COM subsystem (for example MAPI.Session seems to require it). Both COINIT_OLEINITIALIZE and COINIT_APARTMENTTHREADED create a hidden top level window and a message queue for the Perl process. This may create problems with other application, because Perl normally doesn't process its message queue. This means programs using synchronous communication between applications (such as DDE initiation), may hang until Perl makes another OLE method call/property access or terminates. This applies to InstallShield setups and many things started to shell associations. Please try to utilize the CSpinMessageLoop> and CUninitialize> methods if you can not use the default COINIT_MULTITHREADED model. =item OBJECT->Invoke(METHOD,ARGS) The C object method is an alternate way to invoke OLE methods. It is normally equivalent to C<$OBJECT->METHOD(@ARGS)>. This function must be used if the METHOD name contains characters not valid in a Perl variable name (like foreign language characters). It can also be used to invoke the default method of an object even if the default method has not been given a name in the type library. In this case use or C<''> as the method name. To invoke an OLE objects native C method (if such a thing exists), please use: $Object->Invoke('Invoke', @Args); =item Win32::OLE->LastError() The C class method returns the last recorded OLE error. This is a dual value like the C<$!> variable: in a numeric context it returns the error number and in a string context it returns the error message. The last OLE error is automatically reset by a successful OLE call. The numeric value can also explicitly be set by a call (which will discard the string value): Win32::OLE->LastError(0); =item Win32::OLE->Option(OPTION) The C