1 /****************************************************************************** 2 ** $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/LoadLibraryWrapper.hpp 2055 2017-05-13 19:35:47Z jmmcg $ 3 ** 4 ** Copyright © 2002 by J.M.McGuiness, coder@hussar.me.uk 5 ** 6 ** This library is free software; you can redistribute it and/or 7 ** modify it under the terms of the GNU Lesser General Public 8 ** License as published by the Free Software Foundation; either 9 ** version 2.1 of the License, or (at your option) any later version. 10 ** 11 ** This library is distributed in the hope that it will be useful, 12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 ** Lesser General Public License for more details. 15 ** 16 ** You should have received a copy of the GNU Lesser General Public 17 ** License along with this library; if not, write to the Free Software 18 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 #pragma once 22 23 #include "../../../core/non_copyable.hpp" 24 25 26 namespace jmmcg { namespace NTUtils { 27 28 const TCHAR scm_lib_name[]=_T("advapi32.dll"); 29 30 class LoadLibraryWrapper : protected non_copyable { 31 public: 32 LoadLibraryWrapper(const TCHAR * const lib_name) 33 : library_handle(::LoadLibrary(lib_name)) { 34 assert(library_handle); 35 } 36 virtual ~LoadLibraryWrapper(void) { 37 ::FreeLibrary(library_handle); 38 } 39 40 const HMODULE &Handle(void) const noexcept(true) { 41 return library_handle; 42 } 43 44 private: 45 const HMODULE library_handle; 46 47 void operator=(const LoadLibraryWrapper &)=delete; 48 }; 49 50 } }