ole.html

来自「perl教程」· HTML 代码 · 共 944 行 · 第 1/5 页

HTML
944
字号
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>Win32::OLE - OLE Automation extensions</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',2);</script>
<h1><a>Win32::OLE - OLE Automation extensions</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#methods">Methods</a></li>
		<li><a href="#object_methods_and_properties">Object methods and properties</a></li>
		<li><a href="#functions">Functions</a></li>
		<li><a href="#overloading">Overloading</a></li>
		<li><a href="#events">Events</a></li>
		<li><a href="#module_options">Module Options</a></li>
	</ul>

	<li><a href="#examples">EXAMPLES</a></li>
	<li><a href="#notes">NOTES</a></li>
	<ul>

		<li><a href="#hints_for_microsoft_office_automation">Hints for Microsoft Office automation</a></li>
		<li><a href="#incompatibilities">Incompatibilities</a></li>
		<li><a href="#bugs_and_limitations">Bugs and Limitations</a></li>
	</ul>

	<li><a href="#see_also">SEE ALSO</a></li>
	<li><a href="#authors">AUTHORS</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
	<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Win32::OLE - OLE Automation extensions</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
    <span class="variable">$ex</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="string">'Excel.Application'</span><span class="operator">)</span> <span class="keyword">or</span> <span class="keyword">die</span> <span class="string">"oops\n"</span><span class="operator">;</span>
    <span class="variable">$ex</span><span class="operator">-&gt;</span><span class="variable">Amethod</span><span class="operator">(</span><span class="string">"arg"</span><span class="operator">)-&gt;</span><span class="variable">Bmethod</span><span class="operator">-&gt;</span><span class="operator">{</span><span class="string">'Property'</span><span class="operator">}</span> <span class="operator">=</span> <span class="string">"foo"</span><span class="operator">;</span>
    <span class="variable">$ex</span><span class="operator">-&gt;</span><span class="variable">Cmethod</span><span class="operator">(</span><span class="keyword">undef</span><span class="operator">,</span><span class="keyword">undef</span><span class="operator">,</span><span class="variable">$Arg3</span><span class="operator">);</span>
    <span class="variable">$ex</span><span class="operator">-&gt;</span><span class="variable">Dmethod</span><span class="operator">(</span><span class="variable">$RequiredArg1</span><span class="operator">,</span> <span class="operator">{</span><span class="string">NamedArg1</span> <span class="operator">=&gt;</span> <span class="variable">$Value1</span><span class="operator">,</span> <span class="string">NamedArg2</span> <span class="operator">=&gt;</span> <span class="variable">$Value2</span><span class="operator">}</span><span class="operator">);</span>
</pre>
<pre>
    <span class="variable">$wd</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">GetObject</span><span class="operator">(</span><span class="string">"D:\\Data\\Message.doc"</span><span class="operator">);</span>
    <span class="variable">$xl</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">GetActiveObject</span><span class="operator">(</span><span class="string">"Excel.Application"</span><span class="operator">);</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>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.</p>
<p>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.</p>
<p>Actually, that's no longer strictly true.  This module now contains
<strong>ALPHA</strong> level support for OLE events.  This is largely untested and the
specific interface might still change in the future.</p>
<p>
</p>
<h2><a name="methods">Methods</a></h2>
<dl>
<dt><strong><a name="item_new">Win32::OLE-&gt;new(PROGID[, DESTRUCTOR])</a></strong>

<dd>
<p>The <a href="#item_new"><code>new()</code></a> class method starts a new instance of an OLE Automation object.
It returns a reference to this object or <a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> if the creation failed.</p>
</dd>
<dd>
<p>The PROGID argument must be either the OLE <em>program id</em> or the <em>class id</em>
of the required application.  The optional DESTRUCTOR 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 applications in case the
Perl program dies.</p>
</dd>
<dd>
<p>To create an object via DCOM on a remote server you can use an array
reference in place of PROGID.  The referenced array must contain the
machine name and the <em>program id</em> or <em>class id</em>.  For example:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$obj</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="operator">[</span><span class="string">'my.machine.com'</span><span class="operator">,</span> <span class="string">'Program.Id'</span><span class="operator">]</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>If the PROGID is a <em>program id</em> then Win32::OLE will try to resolve the
corresponding <em>class id</em> locally.  If the <em>program id</em> is not registered
locally then the remote registry is queried.  This will only succeed if
the local process has read access to the remote registry.  The safest
(and fastest) method is to specify the <code>class id</code> directly.</p>
</dd>
</li>
<dt><strong><a name="item_enumallobjects">Win32::OLE-&gt;<code>EnumAllObjects([CALLBACK])</code></a></strong>

<dd>
<p>This class method returns the number Win32::OLE objects currently in
existance.  It will call the optional CALLBACK function for each of
these objects:</p>
</dd>
<dd>
<pre>
        <span class="variable">$Count</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">EnumAllObjects</span><span class="operator">(</span><span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span>
            <span class="keyword">my</span> <span class="variable">$Object</span> <span class="operator">=</span> <span class="keyword">shift</span><span class="operator">;</span>
            <span class="keyword">my</span> <span class="variable">$Class</span> <span class="operator">=</span> <span class="variable">Win32::OLE</span><span class="operator">-&gt;</span><span class="variable">QueryObjectType</span><span class="operator">(</span><span class="variable">$Object</span><span class="operator">);</span>
            <span class="keyword">printf</span> <span class="string">"# Object=%s Class=%s\n"</span><span class="operator">,</span> <span class="variable">$Object</span><span class="operator">,</span> <span class="variable">$Class</span><span class="operator">;</span>
        <span class="operator">});</span>
</pre>
</dd>
<dd>
<p>The <a href="#item_enumallobjects"><code>EnumAllObjects()</code></a> method is primarily a debugging tool.  It can be
used e.g. in an END block to check if all external connections have
been properly destroyed.</p>
</dd>
</li>
<dt><strong><a name="item_freeunusedlibraries">Win32::OLE-&gt;<code>FreeUnusedLibraries()</code></a></strong>

<dd>
<p>The <a href="#item_freeunusedlibraries"><code>FreeUnusedLibraries()</code></a> class method unloads all unused OLE
resources.  These are the libraries of those classes of which all
existing objects have been destroyed.  The unloading of object
libraries is really only important for long running processes that
might instantiate a huge number of <strong>different</strong> objects over time.</p>
</dd>
<dd>
<p>Be aware that objects implemented in Visual Basic have a buggy
implementation of this functionality: They pretend to be unloadable
while they are actually still running their cleanup code.  Unloading
the DLL at that moment typically produces an access violation.  The
probability for this problem can be reduced by calling the
<a href="#item_spinmessageloop"><code>SpinMessageLoop()</code></a> method and sleep()ing for a few seconds.</p>
</dd>
</li>
<dt><strong><a name="item_getactiveobject">Win32::OLE-&gt;GetActiveObject(CLASS[, DESTRUCTOR])</a></strong>

<dd>
<p>The <a href="#item_getactiveobject"><code>GetActiveObject()</code></a> class method returns an OLE reference to a
running instance of the specified OLE automation server.  It returns
<a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> if the server is not currently active.  It will croak if
the class is not even registered.  The optional DESTRUCTOR method takes
either a method name or a code reference.  It is executed when the last
reference to this object goes away.  It is generally considered <code>impolite</code>
to stop applications that you did not start yourself.</p>
</dd>
</li>
<dt><strong><a name="item_getobject">Win32::OLE-&gt;GetObject(MONIKER[, DESTRUCTOR])</a></strong>

<dd>
<p>The <a href="#item_getobject"><code>GetObject()</code></a> 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 '!'.  The
optional DESTRUCTOR argument has the same semantics as the DESTRUCTOR in
<a href="#item_new"><code>new()</code></a> or GetActiveObject().</p>
</dd>
</li>
<dt><strong><a name="item_initialize">Win32::OLE-&gt;<code>Initialize([COINIT])</code></a></strong>

<dd>
<p>The <a href="#item_initialize"><code>Initialize()</code></a> class method can be used to specify an alternative
apartment model for the Perl thread.  It must be called <strong>before</strong> the

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?