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, procName) ::GetProcAddressA(module, procName) 13#else 14#define My_GetProcAddress(module, procName) ::GetProcAddress(module, procName) 15#endif 16 17class CLibrary 18{ 19 HMODULE _module; 20public: 21 CLibrary(): _module(NULL) {}; 22 ~CLibrary() { Free(); } 23 24 operator HMODULE() const { return _module; } 25 HMODULE* operator&() { return &_module; } 26 bool IsLoaded() const { return (_module != NULL); }; 27 28 void Attach(HMODULE m) 29 { 30 Free(); 31 _module = m; 32 } 33 HMODULE Detach() 34 { 35 HMODULE m = _module; 36 _module = NULL; 37 return m; 38 } 39 40 bool Free() throw(); 41 bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw(); 42 bool Load(CFSTR path) throw(); 43 FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); } 44}; 45 46bool MyGetModuleFileName(FString &path); 47 48FString GetModuleDirPrefix(); 49 50}} 51 52#endif 53