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