diff options
Diffstat (limited to '3rdparty/lzma/CPP/Windows/DLL.h')
-rw-r--r-- | 3rdparty/lzma/CPP/Windows/DLL.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/3rdparty/lzma/CPP/Windows/DLL.h b/3rdparty/lzma/CPP/Windows/DLL.h index 9f0f5cd72f6..984a1d33b58 100644 --- a/3rdparty/lzma/CPP/Windows/DLL.h +++ b/3rdparty/lzma/CPP/Windows/DLL.h @@ -13,17 +13,23 @@ namespace NDLL { #else #define My_GetProcAddress(module, procName) ::GetProcAddress(module, procName) #endif - + +/* Win32: Don't call CLibrary::Free() and FreeLibrary() from another + FreeLibrary() code: detaching code in DLL entry-point or in + destructors of global objects in DLL module. */ + class CLibrary { HMODULE _module; + + // CLASS_NO_COPY(CLibrary); public: CLibrary(): _module(NULL) {}; ~CLibrary() { Free(); } operator HMODULE() const { return _module; } HMODULE* operator&() { return &_module; } - bool IsLoaded() const { return (_module != NULL); }; + bool IsLoaded() const { return (_module != NULL); } void Attach(HMODULE m) { @@ -37,9 +43,9 @@ public: return m; } - bool Free(); - bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE); - bool Load(CFSTR path); + bool Free() throw(); + bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw(); + bool Load(CFSTR path) throw(); FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); } }; |