tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

DLL.h (1310B)


      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, procName) ::GetProcAddressA(module, procName)
     13 #else
     14 #define My_GetProcAddress(module, procName) ::GetProcAddress(module, procName)
     15 #endif
     16 
     17 /* Win32: Don't call CLibrary::Free() and FreeLibrary() from another
     18    FreeLibrary() code: detaching code in DLL entry-point or in
     19    destructors of global objects in DLL module. */
     20 
     21 class CLibrary
     22 {
     23  HMODULE _module;
     24 
     25  // CLASS_NO_COPY(CLibrary);
     26 public:
     27  CLibrary(): _module(NULL) {};
     28  ~CLibrary() { Free(); }
     29 
     30  operator HMODULE() const { return _module; }
     31  HMODULE* operator&() { return &_module; }
     32  bool IsLoaded() const { return (_module != NULL); }
     33 
     34  void Attach(HMODULE m)
     35  {
     36    Free();
     37    _module = m;
     38  }
     39  HMODULE Detach()
     40  {
     41    HMODULE m = _module;
     42    _module = NULL;
     43    return m;
     44  }
     45 
     46  bool Free() throw();
     47  bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw();
     48  bool Load(CFSTR path) throw();
     49  FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }
     50 };
     51 
     52 bool MyGetModuleFileName(FString &path);
     53 
     54 FString GetModuleDirPrefix();
     55 
     56 }}
     57 
     58 #endif