00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkDynamicLoader_h
00018 #define __itkDynamicLoader_h
00019
00020 #include "itkMacro.h"
00021
00022
00023
00024 #if defined(__hpux)
00025 # include <dl.h>
00026 namespace itk
00027 {
00028 typedef shl_t LibHandle;
00029 }
00030 #elif defined(_WIN32)
00031 #include "itkWindows.h"
00032
00033 namespace itk
00034 {
00035 typedef HMODULE LibHandle;
00036 }
00037 #elif defined(__powerpc)
00038 namespace itk
00039 {
00040 typedef ConnectionID LibHandle;
00041 }
00042 #else
00043 namespace itk
00044 {
00045 typedef void* LibHandle;
00046 }
00047 #endif
00048
00049 #include "itkObject.h"
00050 #include "itkObjectFactory.h"
00051
00052 namespace itk
00053 {
00054
00065 class ITK_EXPORT DynamicLoader : public Object
00066 {
00067 public:
00069 typedef DynamicLoader Self;
00070 typedef Object Superclass;
00071 typedef SmartPointer<Self> Pointer;
00072 typedef SmartPointer<const Self> ConstPointer;
00073
00075 itkNewMacro(Self);
00076
00078 itkTypeMacro(DynamicLoader,Object);
00079
00083 static LibHandle OpenLibrary(const char*);
00084
00087 static int CloseLibrary(LibHandle);
00088
00090 static void* GetSymbolAddress(LibHandle, const char*);
00091
00093 static const char* LibPrefix();
00094
00096 static const char* LibExtension();
00097
00099 static const char* LastError();
00100
00101 protected:
00102 DynamicLoader() {};
00103 ~DynamicLoader() {};
00104
00105 private:
00106 DynamicLoader(const Self&);
00107 void operator=(const Self&);
00108
00109 };
00110
00111 }
00112
00113 #endif