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