home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _b150b5e66535a305db5d279aacd53a72 < prev    next >
Text File  |  2000-03-23  |  14KB  |  261 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Win32::OLE::NEWS - What's new in Win32::OLE</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Win32::OLE::NEWS - What's new in Win32::OLE</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#version 0.11 (changes since 0.1008)">Version 0.11 (changes since 0.1008)</A></LI>
  24.     <UL>
  25.  
  26.         <LI><A HREF="#new dhtml typelib browser">new DHTML typelib browser</A></LI>
  27.         <LI><A HREF="#vt_decimal support">VT_DECIMAL support</A></LI>
  28.     </UL>
  29.  
  30.     <LI><A HREF="#version 0.1008">Version 0.1008</A></LI>
  31.     <UL>
  32.  
  33.         <LI><A HREF="#new letproperty() object method">new <CODE>LetProperty()</CODE> object method</A></LI>
  34.         <LI><A HREF="#new hresult() function">new <CODE>HRESULT()</CODE> function</A></LI>
  35.     </UL>
  36.  
  37.     <LI><A HREF="#version 0.1007 (changes since 0.1005)">Version 0.1007 (changes since 0.1005)</A></LI>
  38.     <UL>
  39.  
  40.         <LI><A HREF="#ole event support">OLE Event support</A></LI>
  41.         <LI><A HREF="#getobject() and getactiveobject() now support optional destructor argument"><CODE>GetObject()</CODE> and <CODE>GetActiveObject()</CODE> now support optional DESTRUCTOR argument</A></LI>
  42.         <LI><A HREF="#remote object instantiation via dcom">Remote object instantiation via DCOM</A></LI>
  43.         <LI><A HREF="#enumerate all win32::ole objects">Enumerate all Win32::OLE objects</A></LI>
  44.         <LI><A HREF="#the variant>put() method now returns the variant object itself">The VARIANT-><CODE>Put()</CODE> method now returns the VARIANT object itself</A></LI>
  45.         <LI><A HREF="#the variant>put(arrayref) form allows assignment to a complete safearray">The VARIANT-><CODE>Put(ARRAYREF)</CODE> form allows assignment to a complete SAFEARRAY</A></LI>
  46.         <LI><A HREF="#new variant formatting methods">New Variant formatting methods</A></LI>
  47.         <LI><A HREF="#new win32::ole::nls methods: sendsettingchange() and setlocaleinfo()">new Win32::OLE::NLS methods: <CODE>SendSettingChange()</CODE> and <CODE>SetLocaleInfo()</CODE></A></LI>
  48.         <LI><A HREF="#win32::ole::const now correctly treats version numbers as hex">Win32::OLE::Const now correctly treats version numbers as hex</A></LI>
  49.         <LI><A HREF="#more robust global destruction of win32::ole objects">more robust global destruction of Win32::OLE objects</A></LI>
  50.     </UL>
  51.  
  52.     <LI><A HREF="#version 0.1005 (changes since 0.1003)">Version 0.1005 (changes since 0.1003)</A></LI>
  53.     <UL>
  54.  
  55.         <LI><A HREF="#optional destructor for getactiveobject() getobject() class methods">optional DESTRUCTOR for <CODE>GetActiveObject()</CODE> <CODE>GetObject()</CODE> class methods</A></LI>
  56.         <LI><A HREF="#new variant object method: $object>copy()">new Variant object method: $object-><CODE>Copy()</CODE></A></LI>
  57.         <LI><A HREF="#new win32::ole>option() class method">new Win32::OLE-><CODE>Option()</CODE> class method</A></LI>
  58.     </UL>
  59.  
  60. </UL>
  61. <!-- INDEX END -->
  62.  
  63. <HR>
  64. <P>
  65. <HR>
  66. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  67. <UL>
  68. <LI>Windows</LI>
  69. </UL>
  70. <HR>
  71. <H1><A NAME="name">NAME</A></H1>
  72. <P>Win32::OLE::NEWS - What's new in Win32::OLE</P>
  73. <P>This file contains a history of user visible changes to the
  74. Win32::OLE::* modules. Only new features and major bug fixes that
  75. might affect backwards compatibility are included.</P>
  76. <P>
  77. <HR>
  78. <H1><A NAME="version 0.11 (changes since 0.1008)">Version 0.11 (changes since 0.1008)</A></H1>
  79. <P>
  80. <H2><A NAME="new dhtml typelib browser">new DHTML typelib browser</A></H2>
  81. <P>The Win32::OLE distribution now contains a type library browser.  It
  82. is written in PerlScript, generating dynamic HTML.  It requires
  83. Internet Explorer 4.0 or later.  You'll find it in
  84. <EM>browser/Browser.html</EM>.  It should be available in the ActivePerl
  85. HTML help under Win32::OLE::Browser.</P>
  86. <P>After selecting a library, type or member you can press F1 to call up
  87. the corresponding help file at the appropriate location.</P>
  88. <P>
  89. <H2><A NAME="vt_decimal support">VT_DECIMAL support</A></H2>
  90. <P>The Win32::OLE::Variant module now supports VT_DECIMAL variants too.
  91. They are not ``officially'' allowed in OLE Automation calls, but even
  92. Microsoft's ``ActiveX Data Objects'' sometimes returns VT_DECIMAL
  93. values.</P>
  94. <P>VT_DECIMAL variables are stored as 96-bit integers scaled by a
  95. variable power of 10.  The power of 10 scaling factor specifies the
  96. number of digits to the right of the decimal point, and ranges from 0
  97. to 28.  With a scale of 0 (no decimal places), the largest possible
  98. value is +/-79,228,162,514,264,337,593,543,950,335.  With a 28 decimal
  99. places, the largest value is +/-7.9228162514264337593543950335 and the
  100. smallest, non-zero value is +/-0.0000000000000000000000000001.</P>
  101. <P>
  102. <HR>
  103. <H1><A NAME="version 0.1008">Version 0.1008</A></H1>
  104. <P>
  105. <H2><A NAME="new letproperty() object method">new <CODE>LetProperty()</CODE> object method</A></H2>
  106. <P>In Win32::OLE property assignment using the hash syntax is equivalent
  107. to the Visual Basic <CODE>Set</CODE> syntax (<EM>by reference</EM> assignment):</P>
  108. <PRE>
  109.   $Object->{Property} = $OtherObject;</PRE>
  110. <P>corresponds to this Visual Basic statement:</P>
  111. <PRE>
  112.   Set Object.Property = OtherObject</PRE>
  113. <P>To get the <EM>by value</EM> treatment of the Visual Basic <CODE>Let</CODE> statement</P>
  114. <PRE>
  115.   Object.Property = OtherObject</PRE>
  116. <P>you have to use the <CODE>LetProperty()</CODE> object method in Perl:</P>
  117. <PRE>
  118.   $Object->LetProperty($Property, $OtherObject);</PRE>
  119. <P>
  120. <H2><A NAME="new hresult() function">new <CODE>HRESULT()</CODE> function</A></H2>
  121. <P>The <CODE>HRESULT()</CODE> function converts an unsigned number into a signed HRESULT
  122. error value as used by OLE internally. This is necessary because Perl
  123. treats all hexadecimal constants as unsigned. To check if the last OLE
  124. function returned ``Member not found'' (0x80020003) you can write:</P>
  125. <PRE>
  126.   if (Win32::OLE->LastError == HRESULT(0x80020003)) {
  127.       # your error recovery here
  128.   }</PRE>
  129. <P>
  130. <HR>
  131. <H1><A NAME="version 0.1007 (changes since 0.1005)">Version 0.1007 (changes since 0.1005)</A></H1>
  132. <P>
  133. <H2><A NAME="ole event support">OLE Event support</A></H2>
  134. <P>This version of Win32::OLE contains <STRONG>ALPHA</STRONG> level support for OLE events. The
  135. userinterface is still subject to change. There are ActiveX objects / controls
  136. that don't fire events under the current implementation.</P>
  137. <P>Events are enabled for a specific object with the Win32::OLE-><CODE>WithEvents()</CODE>
  138. class method:</P>
  139. <PRE>
  140.   Win32::OLE->WithEvents(OBJECT, HANDLER, INTERFACE)</PRE>
  141. <P>Please read further documentation in Win32::OLE.</P>
  142. <P>
  143. <H2><A NAME="getobject() and getactiveobject() now support optional destructor argument"><CODE>GetObject()</CODE> and <CODE>GetActiveObject()</CODE> now support optional DESTRUCTOR argument</A></H2>
  144. <P>It is now possible to specify a DESTRUCTOR argument to the <CODE>GetObject()</CODE> and
  145. <CODE>GetActiveObject()</CODE> class methods. They work identical to the <CODE>new()</CODE> DESTRUCTOR
  146. argument.</P>
  147. <P>
  148. <H2><A NAME="remote object instantiation via dcom">Remote object instantiation via DCOM</A></H2>
  149. <P>This has actually been in Win32::OLE since 0.0608, but somehow never got
  150. documented. You can provide an array reference in place of the usual PROGID
  151. parameter to Win32::OLE->new():</P>
  152. <PRE>
  153.   OBJ = Win32::OLE->new([MACHINE, PRODID]);</PRE>
  154. <P>The array must contain two elements: the name of the MACHINE and the PROGID.
  155. This will try to create the object on the remote MACHINE.</P>
  156. <P>
  157. <H2><A NAME="enumerate all win32::ole objects">Enumerate all Win32::OLE objects</A></H2>
  158. <P>This class method returns the number Win32::OLE objects currently in
  159. existance. It will call the optional CALLBACK function for each of
  160. these objects:</P>
  161. <PRE>
  162.   $Count = Win32::OLE->EnumAllObjects(sub {
  163.       my $Object = shift;
  164.       my $Class = Win32::OLE->QueryObjectType($Object);
  165.       printf "# Object=%s Class=%s\n", $Object, $Class;
  166.   });</PRE>
  167. <P>The <CODE>EnumAllObjects()</CODE> method is primarily a debugging tool. It can be
  168. used e.g. in an END block to check if all external connections have
  169. been properly destroyed.</P>
  170. <P>
  171. <H2><A NAME="the variant>put() method now returns the variant object itself">The VARIANT-><CODE>Put()</CODE> method now returns the VARIANT object itself</A></H2>
  172. <P>This allows chaining of <CODE>Put()</CODE> method calls to set multiple values in an
  173. array variant:</P>
  174. <PRE>
  175.   $Array->Put(0,0,$First_value)->Put(0,1,$Another_value);</PRE>
  176. <P>
  177. <H2><A NAME="the variant>put(arrayref) form allows assignment to a complete safearray">The VARIANT-><CODE>Put(ARRAYREF)</CODE> form allows assignment to a complete SAFEARRAY</A></H2>
  178. <P>This allows automatic conversion from a list of lists to a SAFEARRAY.
  179. You can now write:</P>
  180. <PRE>
  181.   my $Array = Variant(VT_ARRAY|VT_R8, [1,2], 2);
  182.   $Array->Put([[1,2], [3,4]]);</PRE>
  183. <P>instead of the tedious:</P>
  184. <PRE>
  185.   $Array->Put(1,0,1);
  186.   $Array->Put(1,1,2);
  187.   $Array->Put(2,0,3);
  188.   $Array->Put(2,1,4);</PRE>
  189. <P>
  190. <H2><A NAME="new variant formatting methods">New Variant formatting methods</A></H2>
  191. <P>There are four new methods for formatting variant values: Currency(), Date(),
  192. <CODE>Number()</CODE> and Time(). For example:</P>
  193. <PRE>
  194.   my $v = Variant(VT_DATE, "April 1 99");
  195.   print $v->Date(DATE_LONGDATE), "\n";
  196.   print $v->Date("ddd',' MMM dd yy"), "\n";</PRE>
  197. <P>will print:</P>
  198. <PRE>
  199.   Thursday, April 01, 1999
  200.   Thu, Apr 01 99</PRE>
  201. <P>
  202. <H2><A NAME="new win32::ole::nls methods: sendsettingchange() and setlocaleinfo()">new Win32::OLE::NLS methods: <CODE>SendSettingChange()</CODE> and <CODE>SetLocaleInfo()</CODE></A></H2>
  203. <P><CODE>SendSettingChange()</CODE> sends a WM_SETTINGCHANGE message to all top level windows.</P>
  204. <P><CODE>SetLocaleInfo()</CODE> allows changing elements in the user override section of the
  205. locale database. Unfortunately these changes are not automatically available
  206. to further Variant formatting; you have to call <CODE>SendSettingChange()</CODE> first.</P>
  207. <P>
  208. <H2><A NAME="win32::ole::const now correctly treats version numbers as hex">Win32::OLE::Const now correctly treats version numbers as hex</A></H2>
  209. <P>The minor and major version numbers of type libraries have been treated as
  210. decimal. This was wrong. They are now correctly decoded as hex.</P>
  211. <P>
  212. <H2><A NAME="more robust global destruction of win32::ole objects">more robust global destruction of Win32::OLE objects</A></H2>
  213. <P>The final destruction of Win32::OLE objects has always been somewhat fragile.
  214. The reason for this is that Perl doesn't honour reference counts during global
  215. destruction but destroys objects in seemingly random order. This can lead
  216. to leaked database connections or unterminated external objects. The only
  217. solution was to make all objects lexical and hope that no object would be
  218. trapped in a closure. Alternatively all objects could be explicitly set to
  219. <A HREF="../../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A>, which doesn't work very well with exception handling.</P>
  220. <P>With version 0.1007 of Win32::OLE this problem should be gone: The module
  221. keeps a list of active Win32::OLE objects. It uses an END block to destroy
  222. all objects at program termination <EM>before</EM> the Perl's global destruction
  223. starts. Objects still existing at program termination are now destroyed in
  224. reverse order of creation. The effect is similar to explicitly calling
  225. Win32::OLE-><CODE>Uninitialize()</CODE> just prior to termination.</P>
  226. <P>
  227. <HR>
  228. <H1><A NAME="version 0.1005 (changes since 0.1003)">Version 0.1005 (changes since 0.1003)</A></H1>
  229. <P>Win32::OLE 0.1005 has been release with ActivePerl build 509. It is also
  230. included in the <EM>Perl Resource Kit for Win32</EM> Update.</P>
  231. <P>
  232. <H2><A NAME="optional destructor for getactiveobject() getobject() class methods">optional DESTRUCTOR for <CODE>GetActiveObject()</CODE> <CODE>GetObject()</CODE> class methods</A></H2>
  233. <P>The <CODE>GetActiveObject()</CODE> and <CODE>GetObject()</CODE> class method now also support an
  234. optional DESTRUCTOR parameter just like Win32::OLE->new(). The DESTRUCTOR
  235. is executed when the last reference to this object goes away. It is
  236. generally considered <CODE>impolite</CODE> to stop applications that you did not
  237. start yourself.</P>
  238. <P>
  239. <H2><A NAME="new variant object method: $object>copy()">new Variant object method: $object-><CODE>Copy()</CODE></A></H2>
  240. <P>See <A HREF="../../../../site/lib/Win32/OLE/Variant.html#copy([dim])">Copy([DIM]) in the Win32::OLE::Variant manpage</A>.</P>
  241. <P>
  242. <H2><A NAME="new win32::ole>option() class method">new Win32::OLE-><CODE>Option()</CODE> class method</A></H2>
  243. <P>The <CODE>Option()</CODE> class method can be used to inspect and modify
  244. <A HREF="../../../../site/lib/Win32/OLE.html#module options">Module Options in the Win32::OLE manpage</A>. The single argument form retrieves
  245. the value of an option:</P>
  246. <PRE>
  247.   my $CP = Win32::OLE->Option('CP');</PRE>
  248. <P>A single call can be used to set multiple options simultaneously:</P>
  249. <PRE>
  250.   Win32::OLE->Option(CP => CP_ACP, Warn => 3);</PRE>
  251. <P>Currently the following options exist: CP, LCID and <CODE>Warn</CODE>.</P>
  252. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  253. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  254. <STRONG><P CLASS=block> Win32::OLE::NEWS - What's new in Win32::OLE</P></STRONG>
  255. </TD></TR>
  256. </TABLE>
  257.  
  258. </BODY>
  259.  
  260. </HTML>
  261.