Home | History | Annotate | Download | only in Windows
      1 // Windows/DLL.h
      2 
      3 #ifndef __WINDOWS_DLL_H
      4 #define __WINDOWS_DLL_H
      5 
      6 #include "../Common/MyString.h"
      7 
      8 namespace NWindows {
      9 namespace NDLL {
     10 
     11 #ifdef UNDER_CE
     12 #define My_GetProcAddress(module, proceName) GetProcAddressA(module, proceName)
     13 #else
     14 #define My_GetProcAddress(module, proceName) ::GetProcAddress(module, proceName)
     15 #endif
     16 
     17 class CLibrary
     18 {
     19   bool LoadOperations(HMODULE newModule);
     20 protected:
     21   HMODULE _module;
     22 public:
     23   CLibrary(): _module(NULL) {};
     24   ~CLibrary() { Free(); }
     25 
     26   operator HMODULE() const { return _module; }
     27   HMODULE* operator&() { return &_module; }
     28   bool IsLoaded() const { return (_module != NULL); };
     29 
     30   void Attach(HMODULE m)
     31   {
     32     Free();
     33     _module = m;
     34   }
     35   HMODULE Detach()
     36   {
     37     HMODULE m = _module;
     38     _module = NULL;
     39     return m;
     40   }
     41 
     42   bool Free();
     43   bool LoadEx(LPCTSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE);
     44   bool Load(LPCTSTR fileName);
     45   #ifndef _UNICODE
     46   bool LoadEx(LPCWSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE);
     47   bool Load(LPCWSTR fileName);
     48   #endif
     49   FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }
     50 };
     51 
     52 bool MyGetModuleFileName(HMODULE hModule, CSysString &result);
     53 #ifndef _UNICODE
     54 bool MyGetModuleFileName(HMODULE hModule, UString &result);
     55 #endif
     56 
     57 }}
     58 
     59 #endif
     60