Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / Windows / DLL.h
1 // Windows/DLL.h\r
2 \r
3 #ifndef __WINDOWS_DLL_H\r
4 #define __WINDOWS_DLL_H\r
5 \r
6 #include "../Common/MyString.h"\r
7 \r
8 namespace NWindows {\r
9 namespace NDLL {\r
10 \r
11 #ifdef UNDER_CE\r
12 #define My_GetProcAddress(module, proceName) GetProcAddressA(module, proceName)\r
13 #else\r
14 #define My_GetProcAddress(module, proceName) ::GetProcAddress(module, proceName)\r
15 #endif\r
16  \r
17 class CLibrary\r
18 {\r
19   bool LoadOperations(HMODULE newModule);\r
20 protected:\r
21   HMODULE _module;\r
22 public:\r
23   CLibrary(): _module(NULL) {};\r
24   ~CLibrary() { Free(); }\r
25 \r
26   operator HMODULE() const { return _module; }\r
27   HMODULE* operator&() { return &_module; }\r
28   bool IsLoaded() const { return (_module != NULL); };\r
29 \r
30   void Attach(HMODULE m)\r
31   {\r
32     Free();\r
33     _module = m;\r
34   }\r
35   HMODULE Detach()\r
36   {\r
37     HMODULE m = _module;\r
38     _module = NULL;\r
39     return m;\r
40   }\r
41 \r
42   bool Free();\r
43   bool LoadEx(LPCTSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE);\r
44   bool Load(LPCTSTR fileName);\r
45   #ifndef _UNICODE\r
46   bool LoadEx(LPCWSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE);\r
47   bool Load(LPCWSTR fileName);\r
48   #endif\r
49   FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }\r
50 };\r
51 \r
52 bool MyGetModuleFileName(HMODULE hModule, CSysString &result);\r
53 #ifndef _UNICODE\r
54 bool MyGetModuleFileName(HMODULE hModule, UString &result);\r
55 #endif\r
56 \r
57 }}\r
58 \r
59 #endif\r