Update of /cvsroot/perl-win32-gui/Win32-GUI
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28625

Modified Files:
        CHANGELOG GUI.h GUI.pm GUI.xs 
Log Message:
Fix build/test on Perl 5.6.1

Index: GUI.xs
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.xs,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** GUI.xs      13 Apr 2006 22:17:07 -0000      1.54
--- GUI.xs      14 Apr 2006 01:52:25 -0000      1.55
***************
*** 5577,5580 ****
--- 5577,5665 ----
      RETVAL
  
+ 
+     
###########################################################################
+     # (@)INTERNAL:GetDllVersion(DLLNAME)
+     # Replacement for Win32::GetFileVersion, which doesn't exist in perl 5.6 
or
+     # cygwin perl 5.8
+     # In scalar contect returns dotted string of dll version
+     # In list context returns major version, minor version, build
+ void
+ GetDllVersion(filename)
+     LPCTSTR filename
+ PREINIT:
+     HINSTANCE hinstDll;
+     DWORD major = -1;
+     DWORD minor = -1;
+     DWORD build = -1;
+ PPCODE:
+     hinstDll = LoadLibrary(filename);
+ 
+     if(hinstDll) {
+         DLLGETVERSIONPROC pDllGetVersion;
+         pDllGetVersion = 
(DLLGETVERSIONPROC)GetProcAddress(hinstDll,"DllGetVersion");
+ 
+         if(pDllGetVersion) {
+             DLLVERSIONINFO dvi;
+             HRESULT hr;
+ 
+             ZeroMemory(&dvi, sizeof(dvi));
+             dvi.cbSize = sizeof(dvi);
+ 
+             hr = (*pDllGetVersion)(&dvi);
+     
+             if(SUCCEEDED(hr)) {
+                 major = dvi.dwMajorVersion;
+                 minor = dvi.dwMinorVersion;
+                 build = dvi.dwBuildNumber;
+             }
+         }
+ 
+         FreeLibrary(hinstDll);
+     }
+ 
+     if(major == -1) {
+         DWORD size;
+         DWORD handle;
+         char *data;
+ 
+         size = GetFileVersionInfoSize(filename, &handle);
+         if(size) {
+             New(0, data, size, char);
+             if(data) {
+                 if(GetFileVersionInfo(filename, handle, size, data)) {
+                     VS_FIXEDFILEINFO *info;
+                     UINT len;
+                     if(VerQueryValue(data, "\\", (void**)&info, &len)) {
+                         major = (info->dwFileVersionMS>>16);
+                         minor = (info->dwFileVersionMS&0xffff);
+                         build = (info->dwFileVersionLS>>16);
+                   }
+               }
+ 
+                 Safefree(data);
+           }
+       }
+     }
+ 
+     if(major == -1) {
+           XSRETURN_UNDEF;
+     }
+ 
+     if (GIMME_V == G_ARRAY) {
+         EXTEND(SP, 3);
+         XST_mIV(0, major);
+         XST_mIV(1, minor);
+         XST_mIV(2, build);
+       items = 3;
+     }
+     else {
+        char version[50];
+        sprintf(version, "%d.%d.%d", major, minor, build);
+        XST_mPV(0, version);
+        items = 1;
+     }
+     XSRETURN(items);
+ 
+ 
      
###########################################################################
      # (@)PACKAGE:Win32::GUI::Menu

Index: GUI.h
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** GUI.h       16 Mar 2006 21:11:11 -0000      1.27
--- GUI.h       14 Apr 2006 01:52:25 -0000      1.28
***************
*** 18,21 ****
--- 18,22 ----
  #include <richedit.h>
  #include <shellapi.h>
+ #include <shlwapi.h>
  #include <shlobj.h>
  

Index: GUI.pm
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** GUI.pm      12 Apr 2006 20:00:05 -0000      1.40
--- GUI.pm      14 Apr 2006 01:52:25 -0000      1.41
***************
*** 469,472 ****
--- 469,474 ----
  }
  
+ bootstrap Win32::GUI;
+ 
  
###############################################################################
  # PUBLIC METHODS
***************
*** 2785,2793 ****
  # has been loaded.
  package Win32::GUI::NotifyIcon;
! use Win32();
! our $SHELLDLL_VERSION;
! BEGIN {
!     $SHELLDLL_VERSION = (Win32::GetFileVersion('shell32'))[0];
! }
  
      
###########################################################################
--- 2787,2791 ----
  # has been loaded.
  package Win32::GUI::NotifyIcon;
! our $SHELLDLL_VERSION = (Win32::GUI::GetDllVersion('shell32'))[0];
  
      
###########################################################################
***************
*** 3559,3563 ****
  package Win32::GUI;
  
! bootstrap Win32::GUI;
  
  bootstrap_subpackage 'Animation';
--- 3557,3563 ----
  package Win32::GUI;
  
! # Need to bootstrap Win32::GUI early, so that we can call
! # Win32::GUI::GetDllVersion during use/compile time
! #bootstrap Win32::GUI;
  
  bootstrap_subpackage 'Animation';

Index: CHANGELOG
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v
retrieving revision 1.77
retrieving revision 1.78
diff -C2 -d -r1.77 -r1.78
*** CHANGELOG   13 Apr 2006 22:17:07 -0000      1.77
--- CHANGELOG   14 Apr 2006 01:52:25 -0000      1.78
***************
*** 6,9 ****
--- 6,21 ----
  Win32-GUI ChangeLog
  ===================
+ + [Robert May] : 14 Apr 2006 - Fix build/test on Perl 5.6.1
+     - GUI.h GUI.xs add GetDllVersion call to replace use of
+       Win32::GetFileVersion that is not available in perl 5.6 (or
+       cygwin perl 5.8)
+     - GUI.pm Change use of Win32::GetFileVersion to
+       Win32::GUI::GetDllVersion.  Change position of bootstrap for
+       Win32::GUI so that we can call Win32::GUI::GetDllVersion
+     - t/05_NotifyIcon_01_Constructor.t add test to ensure that
+       $Win32::GUI::NotifyIcon::SHELLDLL_VERSION is set
+     - samples/NotifyIcon.pl Use new Win32::GUI::GetDllVersion and
+       a couple of minor bug-fixes under perl 5.6
+ 
  + [Robert May] : 13 Apr 2006 - Clean build under Cygwin
      - TYPEMAP corrected various entries to use INT2PTR and PTR2INT


Reply via email to