[ctypes-commit] ctypes/ctypes _loader.py,NONE,1.1.2.1
Brought to you by:
theller
From: Thomas H. <th...@us...> - 2006-01-10 21:08:42
|
Update of /cvsroot/ctypes/ctypes/ctypes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3862 Added Files: Tag: branch_1_0 _loader.py Log Message: Work in progress. --- NEW FILE: _loader.py --- # WORK IN PROGRESS! DO NOT (yet) USE! import sys import ctypes from _ctypes import dlopen, RTLD_LOCAL, RTLD_GLOBAL class LibraryLoader(object): def __init__(self, dlltype, mode=RTLD_LOCAL): self._dlltype = dlltype self._mode = mode def load(self, libname, mode=None): if mode is None: mode = self._mode return self._dlltype(libname, mode) def load_version(self, name, version, mode=None): return self.load("lib%s.so.%s" % (name, version), mode) def find(self, name, mode=None): from ctypes.util import findLib for libname in findLib(name): try: return self.load(libname, mode) except OSError, error: continue else: raise OSError, error def __getattr__(self, name): if name.startswith("_"): raise AttributeError(name) return self.find(name) class CDLL(object): def __init__(self, name, mode): self._handle = dlopen(name, mode) self._name = name def __repr__(self): return "<%s '%s', handle %x at %x>" % \ (self.__class__.__name__, self._name, (self._handle & (sys.maxint*2 + 1)), id(self)) cdll = LibraryLoader(CDLL) ################################################################ # test code print cdll.load("libc.so.6") print cdll.load("libGL.so", RTLD_GLOBAL) print cdll.load_version("m", "6") print cdll.m print cdll.png print cdll._a_b_c_ print cdll.xyz |