1// Windows/DLL.h 2 3#ifndef __WINDOWS_DLL_H 4#define __WINDOWS_DLL_H 5 6#include "../Common/MyString.h" 7 8namespace NWindows { 9namespace 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 17class CLibrary 18{ 19 bool LoadOperations(HMODULE newModule); 20protected: 21 HMODULE _module; 22public: 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 52bool MyGetModuleFileName(HMODULE hModule, CSysString &result); 53#ifndef _UNICODE 54bool MyGetModuleFileName(HMODULE hModule, UString &result); 55#endif 56 57}} 58 59#endif 60