Mercurial > projects > dwt2
comparison base/src/java/nonstandard/SharedLib.d @ 47:65761bc28ab2
swt linux again compilable for d1.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 27 Mar 2009 11:43:53 +0100 |
parents | 17310ba3c1bc |
children | 8a5386b204bb |
comparison
equal
deleted
inserted
replaced
46:17310ba3c1bc | 47:65761bc28ab2 |
---|---|
1 module java.nonstandard.SharedLib; | 1 module java.nonstandard.SharedLib; |
2 | 2 |
3 import java.lang.all; | 3 import java.lang.all; |
4 version(Tango){ | |
5 static import tango.sys.SharedLib; | |
6 static import tango.stdc.stringz; | |
7 } | |
4 | 8 |
5 struct Symbol { | 9 struct Symbol { |
6 String name; | 10 String name; |
7 void** symbol; | 11 void** symbol; |
8 } | 12 } |
19 version(Tango){ | 23 version(Tango){ |
20 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { | 24 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { |
21 foreach( inout s; symbols ){ | 25 foreach( inout s; symbols ){ |
22 if( s.major < major ) continue; | 26 if( s.major < major ) continue; |
23 if( s.major == major && s.minor > minor ) continue; | 27 if( s.major == major && s.minor > minor ) continue; |
24 *s.symbol = lib.getSymbol( s.name.ptr ); | 28 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) ); |
25 if( s.symbol is null ){ | 29 if( s.symbol is null ){ |
26 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); | 30 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); |
27 } | 31 } |
28 } | 32 } |
29 } else { | 33 } else { |
35 } | 39 } |
36 static void loadLibSymbols( Symbol[] symbols, String libname ){ | 40 static void loadLibSymbols( Symbol[] symbols, String libname ){ |
37 version(Tango){ | 41 version(Tango){ |
38 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { | 42 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { |
39 foreach( inout s; symbols ){ | 43 foreach( inout s; symbols ){ |
40 *s.symbol = lib.getSymbol( s.name.ptr ); | 44 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) ); |
41 if( s.symbol is null ){ | 45 if( s.symbol is null ){ |
42 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); | 46 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); |
43 } | 47 } |
44 } | 48 } |
45 } else { | 49 } else { |
51 } | 55 } |
52 static bool tryUseSymbol( String symbolname, String libname, void delegate( void*) dg ){ | 56 static bool tryUseSymbol( String symbolname, String libname, void delegate( void*) dg ){ |
53 bool result = false; | 57 bool result = false; |
54 version(Tango){ | 58 version(Tango){ |
55 if (auto lib = tango.sys.SharedLib.SharedLib.load( libname ) ) { | 59 if (auto lib = tango.sys.SharedLib.SharedLib.load( libname ) ) { |
56 void* ptr = lib.getSymbol(symbolname); | 60 void* ptr = lib.getSymbol( tango.stdc.stringz.toStringz(symbolname)); |
57 if (ptr !is null){ | 61 if (ptr !is null){ |
58 dg(ptr); | 62 dg(ptr); |
59 result = true; | 63 result = true; |
60 } | 64 } |
61 lib.unload(); | 65 lib.unload(); |