diff org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/win32/OS.d @ 46:17310ba3c1bc

Moved all load lib functionality into own module
author Frank Benoit <benoit@tionex.de>
date Fri, 27 Mar 2009 11:10:45 +0100
parents ed96ea2a2764
children 9f4c18c268b2
line wrap: on
line diff
--- a/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/win32/OS.d	Wed Mar 25 18:52:36 2009 +0100
+++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/win32/OS.d	Fri Mar 27 11:10:45 2009 +0100
@@ -18,9 +18,9 @@
 import org.eclipse.swt.internal.C;
 import org.eclipse.swt.internal.Library;
 import java.lang.all;
+import java.nonstandard.SharedLib;
 
 version(Tango){
-static import tango.sys.SharedLib;
 static import tango.sys.Common;
 
 static import tango.stdc.stdlib;
@@ -82,31 +82,6 @@
 
 public class OS : C {
 
-    struct Symbol {
-        String name;
-        void** symbol;
-        int major;
-        int minor;
-    }
-    static void loadLib( Symbol[] symbols, String libname ){
-        version(Tango){
-            if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) {
-                foreach( inout s; symbols ){
-                    if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){
-                        *s.symbol = lib.getSymbol( s.name.ptr );
-                        if( s.symbol is null ){
-                            getDwtLogger.error(  __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name );
-                        }
-                    }
-                }
-            } else {
-                getDwtLogger.error(  __FILE__, __LINE__, "Could not load the library {}", libname );
-            }
-        } else { // Phobos
-            implMissing( __FILE__, __LINE__ );
-        }
-    }
-
     public static HINSTANCE GetLibraryHandle(){
         //PORTING_FIXME: GetLibraryHandle
         // is the hInstance of the DLL or null, if not a DLL.
@@ -307,7 +282,7 @@
         WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
 
         if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 0)) {
-            loadLib( Symbols_Kernel32, `Kernel32.dll` );
+            SharedLib.loadLibSymbols( Symbols_Kernel32, `Kernel32.dll`, WIN32_MAJOR, WIN32_MINOR );
         }
 
         //PORTING_CHANGE: made by version
@@ -320,16 +295,16 @@
 
         // when to load uxtheme
         if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
-            loadLib( Symbols_UxTheme, `UxTheme.dll` );
+            SharedLib.loadLibSymbols( Symbols_UxTheme, `UxTheme.dll`, WIN32_MAJOR, WIN32_MINOR );
         }
         if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
-            loadLib( Symbols_CoreImm, `Coreimm.dll` );
+            SharedLib.loadLibSymbols( Symbols_CoreImm, `Coreimm.dll`, WIN32_MAJOR, WIN32_MINOR );
         }
         if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 0)) {
-            loadLib( Symbols_User32, `User32.dll` );
+            SharedLib.loadLibSymbols( Symbols_User32, `User32.dll`, WIN32_MAJOR, WIN32_MINOR );
         }
         if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (4, 0)) {
-            loadLib( Symbols_Imm32, `Imm32.dll` );
+            SharedLib.loadLibSymbols( Symbols_Imm32, `Imm32.dll`, WIN32_MAJOR, WIN32_MINOR );
         }
 
         /* Make the process DPI aware for Windows Vista */
@@ -372,20 +347,11 @@
         //PORTING_CHANGE: comctl is loaded automatically
         //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$
         //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
-        version(Tango){
-            if (auto lib = tango.sys.SharedLib.SharedLib.load( `comctl32.dll`) ) {
-                char[] name = "DllGetVersion\0"; //$NON-NLS-1$
-                void* DllGetVersion = lib.getSymbol(name.ptr);
-                if (DllGetVersion !is null){
-                    alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
-                    TDllVersion f = cast( TDllVersion )DllGetVersion;
-                    f(&dvi);
-                }
-                lib.unload();
-            }
-        } else { // Phobos
-            implMissing( __FILE__, __LINE__ );
-        }
+        SharedLib.tryUseSymbol( "DllGetVersion", "comctl32.dll", (void* ptr){
+            alias extern(Windows) void function(DLLVERSIONINFO*) TDllGetVersion;
+            auto func = cast( TDllGetVersion ) ptr;
+            func(&dvi);
+        });
         COMCTL32_MAJOR = dvi.dwMajorVersion;
         COMCTL32_MINOR = dvi.dwMinorVersion;
         COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
@@ -396,20 +362,11 @@
         dvi.dwMajorVersion = 4;
         //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$
         //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
-        version(Tango){
-            if ( auto lib = tango.sys.SharedLib.SharedLib.load( `Shell32.dll`)) {
-                char[] name = "DllGetVersion\0"; //$NON-NLS-1$
-                void* DllGetVersion = lib.getSymbol(name.ptr);
-                if (DllGetVersion !is null){
-                    alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
-                    TDllVersion f = cast( TDllVersion )DllGetVersion;
-                    f(&dvi);
-                }
-                lib.unload();
-            }
-        } else { // Phobos
-            implMissing( __FILE__, __LINE__ );
-        }
+        SharedLib.tryUseSymbol( "DllGetVersion", "Shell32.dll", (void* ptr){
+            alias extern(Windows) void function(DLLVERSIONINFO*) TDllGetVersion;
+            auto func = cast( TDllGetVersion ) ptr;
+            func(&dvi);
+        });
         SHELL32_MAJOR = dvi.dwMajorVersion;
         SHELL32_MINOR = dvi.dwMinorVersion;
         SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
@@ -2712,7 +2669,7 @@
 
 } // public static
 
-static Symbol[] Symbols_UxTheme = [
+static SymbolVersioned2[] Symbols_UxTheme = [
     { "IsAppThemed", cast(void**)& IsAppThemed, 5, 1 },
     { "DrawThemeBackground", cast(void**)& DrawThemeBackground, 5, 1 },
     { "DrawThemeEdge", cast(void**)& DrawThemeEdge, 5, 1 },
@@ -2730,22 +2687,7 @@
 ];
 
 static void loadLib_UxTheme(){
-    version(Tango){
-        if (auto lib = tango.sys.SharedLib.SharedLib.load(`uxtheme.dll`)) {
-            foreach( inout s; Symbols_UxTheme ){
-                if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){
-                    *s.symbol = lib.getSymbol( s.name.ptr );
-                    if( *s.symbol is null ){
-                        getDwtLogger.error( __FILE__, __LINE__, "UxTheme.dll: Symbol '{}' not found", s.name );
-                    }
-                }
-            }
-        } else {
-            getDwtLogger.error( __FILE__, __LINE__, "Could not load the library UxTheme.dll");
-        }
-    } else { // Phobos
-        implMissing( __FILE__, __LINE__ );
-    }
+    SharedLib.loadLibSymbols( Symbols_UxTheme, "uxtheme.dll", WIN32_MAJOR, WIN32_MINOR );
 }
 //----------------------------------------------------------------------
 // Coreimm.lib (WinCE)
@@ -2775,7 +2717,7 @@
 } // public static extern(Windows)
 
 
-static Symbol[] Symbols_CoreImm = [
+static SymbolVersioned2[] Symbols_CoreImm = [
 ];
 
 // user32.dll vista
@@ -2784,7 +2726,7 @@
     BOOL function( HWND hWnd )IsHungAppWindow;
 }
 
-static Symbol[] Symbols_User32 = [
+static SymbolVersioned2[] Symbols_User32 = [
     { "SetProcessDPIAware", cast(void**)& SetProcessDPIAware, 6, 0 },
     { "GetLayeredWindowAttributes", cast(void**)& GetLayeredWindowAttributes, 5, 1 },
     { "SetLayeredWindowAttributes", cast(void**)& SetLayeredWindowAttributes, 5, 0 },
@@ -2845,7 +2787,7 @@
 
 }
 
-static Symbol[] Symbols_Imm32 = [
+static SymbolVersioned2[] Symbols_Imm32 = [
     { "ImmAssociateContext", cast(void**)& ImmAssociateContext, 5, 1 },
     { "ImmCreateContext", cast(void**)& ImmCreateContext, 5, 1 },
     { "ImmDestroyContext", cast(void**)& ImmDestroyContext, 5, 1 },
@@ -2869,7 +2811,7 @@
 
 version(ANSI){
 }else{
-static Symbol[] Symbols_Kernel32 = [
+static SymbolVersioned2[] Symbols_Kernel32 = [
     { "CreateActCtxW", cast(void**)& CreateActCtx, 5, 1 },
     { "ActivateActCtx", cast(void**)& ActivateActCtx, 5, 1 },
     { "GetSystemDefaultUILanguage", cast(void**)& GetSystemDefaultUILanguage, 5, 0 },