# # (C) Copyright 2014 Enthought, Inc., Austin, TX # All right reserved. # # This file is open source software distributed according to the terms in # LICENSE.txt # """ Utility functions to help with ctypes wrapping. """ from __future__ import absolute_import from ctypes import GetLastError, FormatError, WinDLL def function_factory( function, argument_types=None, return_type=None, error_checking=None): if argument_types is not None: function.argtypes = argument_types function.restype = return_type if error_checking is not None: function.errcheck = error_checking return function def make_error(function, function_name=None): code = GetLastError() description = FormatError(code).strip() if function_name is None: function_name = function.__name__ exception = WindowsError() exception.winerror = code exception.function = function_name exception.strerror = description return exception def check_null_factory(function_name=None): def check_null(result, function, arguments, *args): if result is None: raise make_error(function, function_name) return result return check_null check_null = check_null_factory() def check_zero_factory(function_name=None): def check_zero(result, function, arguments, *args): if result == 0: raise make_error(function, function_name) return result return check_zero check_zero = check_zero_factory() def check_false_factory(function_name=None): def check_false(result, function, arguments, *args): if not bool(result): raise make_error(function, function_name) else: return True return check_false check_false = check_false_factory() class Libraries(object): def __getattr__(self, name): library = WinDLL(name) self.__dict__[name] = library return library dlls = Libraries()