00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _hyp_ker_dll_h_
00030 #define _hyp_ker_dll_h_
00031
00032 #ifndef hyp_KERNEL_CORE_INSIDE
00033 #error Inclusion not allowed (include hyp.kernel.core.h instead)
00034 #endif
00035
00036
00041 enum EDllReason {
00042 dll_attach,
00043 dll_detach
00044 };
00045
00057 typedef void (hyp_CALL_CONV *PTR_INITLIBRARY)(const std::vector<std::string>&,EDllReason);
00058
00059
00060
00061 class hyp_ker_DLL CDllUtility
00062 {
00063 class hyp_ker_DLL CDllData
00064 {
00065 bool m_InitLibrary;
00066 HINSTANCE m_H;
00067 public:
00068 CDllData(HINSTANCE,bool);
00069 CDllData(const CDllData&);
00070 CDllData();
00071 HINSTANCE& GetH();
00072 const HINSTANCE& GetH() const;
00073 bool Init() const;
00074 bool FreeLibrary();
00075 };
00076
00077 typedef std::map<std::string,CDllData> t_DllCont;
00078 struct hyp_ker_DLL CDllContainer :
00079 public t_DllCont
00080 {
00081 virtual ~CDllContainer();
00082 };
00083
00084 static CDllContainer ms_DllCont;
00085
00086 void InitializeLibrary(const std::string&,EDllReason);
00087
00088 public:
00089 void LoadLibrary(const std::string&,bool);
00090 void UnloadLibrary(const std::string&);
00091 void UnloadAllLibraries();
00092 void* GetFunctionAddress(const std::string&,const std::string&);
00093
00094 hyp_ker_DLL friend std::ostream& operator<<(std::ostream&,const CDllUtility&);
00095 };
00096
00097
00098 #endif