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 #else
00038 namespace itk
00039 {
00040 typedef void* LibHandle;
00041 }
00042 #endif
00043
00044 #include "itkObject.h"
00045 #include "itkObjectFactory.h"
00046
00047 namespace itk
00048 {
00049
00060 class ITKCommon_EXPORT DynamicLoader : public Object
00061 {
00062 public:
00064 typedef DynamicLoader Self;
00065 typedef Object Superclass;
00066 typedef SmartPointer<Self> Pointer;
00067 typedef SmartPointer<const Self> ConstPointer;
00068
00070 itkNewMacro(Self);
00071
00073 itkTypeMacro(DynamicLoader,Object);
00074
00078 static LibHandle OpenLibrary(const char*);
00079
00082 static int CloseLibrary(LibHandle);
00083
00085 static void* GetSymbolAddress(LibHandle, const char*);
00086
00088 static const char* LibPrefix();
00089
00091 static const char* LibExtension();
00092
00094 static const char* LastError();
00095
00096 protected:
00097 DynamicLoader();
00098 ~DynamicLoader();
00099
00100 private:
00101 DynamicLoader(const Self&);
00102 void operator=(const Self&);
00103
00104 };
00105
00106 }
00107
00108 #endif