variant.html

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

HTML
721
字号
<?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::Variant - Create and modify OLE VARIANT variables</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__',3);</script>
<h1><a>Win32::OLE::Variant - Create and modify OLE VARIANT variables</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="#functions">Functions</a></li>
		<li><a href="#methods">Methods</a></li>
		<li><a href="#overloading">Overloading</a></li>
		<li><a href="#class_variables">Class Variables</a></li>
		<li><a href="#constants">Constants</a></li>
		<li><a href="#variants">Variants</a></li>
		<li><a href="#variant_arrays">Variant arrays</a></li>
		<li><a href="#variants_by_reference">Variants by reference</a></li>
	</ul>

	<li><a href="#authors_copyright">AUTHORS/COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Win32::OLE::Variant - Create and modify OLE VARIANT variables</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
        <span class="keyword">use</span> <span class="variable">Win32::OLE::Variant</span><span class="operator">;</span>
        <span class="keyword">my</span> <span class="variable">$var</span> <span class="operator">=</span> <span class="variable">Variant</span><span class="operator">(</span><span class="variable">VT_DATE</span><span class="operator">,</span> <span class="string">'Jan 1,1970'</span><span class="operator">);</span>
        <span class="variable">$OleObject</span><span class="operator">-&gt;</span><span class="operator">{</span><span class="string">value</span><span class="operator">}</span> <span class="operator">=</span> <span class="variable">$var</span><span class="operator">;</span>
        <span class="variable">$OleObject</span><span class="operator">-&gt;</span><span class="variable">Method</span><span class="operator">(</span><span class="variable">$var</span><span class="operator">);</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>The IDispatch interface used by the Perl OLE module uses a universal
argument type called VARIANT.  This is basically an object containing
a data type and the actual data value.  The data type is specified by
the VT_xxx constants.</p>
<p>
</p>
<h2><a name="functions">Functions</a></h2>
<dl>
<dt><strong><a name="item_nothing"><code>nothing()</code></a></strong>

<dd>
<p>The <a href="#item_nothing"><code>nothing()</code></a> function returns an empty VT_DISPATCH variant.  It can be
used to clear an object reference stored in a property</p>
</dd>
<dd>
<pre>
        <span class="keyword">use</span> <span class="variable">Win32::OLE::Variant</span> <span class="string">qw(:DEFAULT nothing)</span><span class="operator">;</span>
        <span class="comment"># ...</span>
        <span class="variable">$object</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="variable">nothing</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>This has the same effect as the Visual Basic statement</p>
</dd>
<dd>
<pre>
        Set object.Property = Nothing</pre>
</dd>
<dd>
<p>The <a href="#item_nothing"><code>nothing()</code></a> function is <strong>not</strong> exported by default.</p>
</dd>
</li>
<dt><strong><a name="item_nullstring"><code>nullstring()</code></a></strong>

<dd>
<p>The <a href="#item_nullstring"><code>nullstring()</code></a> function returns a VT_BSTR variant with a NULL string
pointer.  This is <strong>not</strong> the same as a VT_BSTR variant with an empty
string &quot;&quot;.  The <a href="#item_nullstring"><code>nullstring()</code></a> value is the same as the vbNullString
constant in Visual Basic.</p>
</dd>
<dd>
<p>The <a href="#item_nullstring"><code>nullstring()</code></a> function is <strong>not</strong> exported by default.</p>
</dd>
</li>
<dt><strong><a name="item_variant">Variant(TYPE, DATA)</a></strong>

<dd>
<p>This is just a function alias of the <code>Win32::OLE::Variant-</code>new()&gt;
method (see below).  This function is exported by default.</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="methods">Methods</a></h2>
<dl>
<dt><strong><a name="item_new">new(TYPE, DATA)</a></strong>

<dd>
<p>This method returns a Win32::OLE::Variant object of the specified
TYPE that contains the given DATA.  The Win32::OLE::Variant object
can be used to specify data types other than IV, NV or PV (which are
supported transparently).  See <em>Variants</em> below for details.</p>
</dd>
<dd>
<p>For VT_EMPTY and VT_NULL variants, the DATA argument may be omitted.
For all non-VT_ARRAY variants DATA specifies the initial value.</p>
</dd>
<dd>
<p>To create a SAFEARRAY variant, you have to specify the VT_ARRAY flag in
addition to the variant base type of the array elemnts.  In this cases
DATA must be a list specifying the dimensions of the array.  Each element
can be either an element count (indices 0 to count-1) or an array
reference pointing to the lower and upper array bounds of this dimension:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$Array</span> <span class="operator">=</span> <span class="variable">Win32::OLE::Variant</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="variable">VT_ARRAY</span><span class="operator">|</span><span class="variable">VT_R8</span><span class="operator">,</span> <span class="operator">[</span><span class="number">1</span><span class="operator">,</span><span class="number">2</span><span class="operator">]</span><span class="operator">,</span> <span class="number">2</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>This creates a 2-dimensional SAFEARRAY of doubles with 4 elements:
(1,0), (1,1), (2,0) and (2,1).</p>
</dd>
<dd>
<p>A special case is the the creation of one-dimensional VT_UI1 arrays with
a string DATA argument:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$String</span> <span class="operator">=</span> <span class="variable">Variant</span><span class="operator">(</span><span class="variable">VT_ARRAY</span><span class="operator">|</span><span class="variable">VT_UI1</span><span class="operator">,</span> <span class="string">"String"</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>This creates a 6 element character array initialized to &quot;String&quot;.  For
backward compatibility VT_UI1 with a string initializer automatically
implies VT_ARRAY.  The next line is equivalent to the previous example:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$String</span> <span class="operator">=</span> <span class="variable">Variant</span><span class="operator">(</span><span class="variable">VT_UI1</span><span class="operator">,</span> <span class="string">"String"</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>If you really need a single character VT_UI1 variant, you have to create
it using a numeric intializer:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$Char</span> <span class="operator">=</span> <span class="variable">Variant</span><span class="operator">(</span><span class="variable">VT_UI1</span><span class="operator">,</span> <span class="keyword">ord</span><span class="operator">(</span><span class="string">'A'</span><span class="operator">));</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_as"><code>As(TYPE)</code></a></strong>

<dd>
<p><a href="#item_as"><code>As</code></a> converts the VARIANT to the new type before converting to a
Perl value.  This take the current LCID setting into account.  For
example a string might contain a ',' as the decimal point character.
Using <code>$variant-</code>As(VT_R8)&gt; will correctly return the floating
point value.</p>
</dd>
<dd>
<p>The underlying variant object is NOT changed by this method.</p>
</dd>
</li>
<dt><strong><a name="item_changetype"><code>ChangeType(TYPE)</code></a></strong>

<dd>
<p>This method changes the type of the contained VARIANT in place.  It
returns the object itself, not the converted value.</p>
</dd>
</li>
<dt><strong><a name="item_copy"><code>Copy([DIM])</code></a></strong>

<dd>
<p>This method creates a copy of the object.  If the original variant had
the VT_BYREF bit set then the new object will contain a copy of the
referenced data and not a reference to the same old data.  The new
object will not have the VT_BYREF bit set.</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$Var</span> <span class="operator">=</span> <span class="variable">Variant</span><span class="operator">(</span><span class="variable">VT_I4</span><span class="operator">|</span><span class="variable">VT_ARRAY</span><span class="operator">|</span><span class="variable">VT_BYREF</span><span class="operator">,</span> <span class="operator">[</span><span class="number">1</span><span class="operator">,</span><span class="number">5</span><span class="operator">]</span><span class="operator">,</span> <span class="number">3</span><span class="operator">);</span>
        <span class="keyword">my</span> <span class="variable">$Copy</span> <span class="operator">=</span> <span class="variable">$Var</span><span class="operator">-&gt;</span><span class="variable">Copy</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>The type of <code>$Copy</code> is now VT_I4|VT_ARRAY and the value is a copy of
the other SAFEARRAY.  Changes to elements of <code>$Var</code> will not be reflected
in <code>$Copy</code> and vice versa.</p>
</dd>
<dd>
<p>The <a href="#item_copy"><code>Copy</code></a> method can also be used to extract a single element of a
VT_ARRAY | VT_VARIANT object.  In this case the array indices must be
specified as a list DIM:</p>
</dd>
<dd>
<pre>
        <span class="keyword">my</span> <span class="variable">$Int</span> <span class="operator">=</span> <span class="variable">$Var</span><span class="operator">-&gt;</span><span class="variable">Copy</span><span class="operator">(</span><span class="number">1</span><span class="operator">,</span> <span class="number">2</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p><code>$Int</code> is now a VT_I4 Variant object containing the value of element (1,2).</p>
</dd>
</li>
<dt><strong><a name="item_currency">Currency([FORMAT[, LCID]])</a></strong>

<dd>
<p>This method converts the VARIANT value into a formatted curency string.  The
FORMAT can be either an integer constant or a hash reference.  Valid constants
are 0 and LOCALE_NOUSEROVERRIDE.  You get the value of LOCALE_NOUSEROVERRIDE
from the Win32::OLE::NLS module:</p>
</dd>
<dd>
<pre>
        <span class="keyword">use</span> <span class="variable">Win32::OLE::NLS</span> <span class="string">qw(:LOCALE)</span><span class="operator">;</span>
</pre>

⌨️ 快捷键说明

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