OLD | NEW |
| (Empty) |
1 // Windows/DLL.cpp | |
2 | |
3 #include "StdAfx.h" | |
4 | |
5 #include "DLL.h" | |
6 #include "Defs.h" | |
7 #ifndef _UNICODE | |
8 #include "../Common/StringConvert.h" | |
9 #endif | |
10 | |
11 #ifndef _UNICODE | |
12 extern bool g_IsNT; | |
13 #endif | |
14 | |
15 namespace NWindows { | |
16 namespace NDLL { | |
17 | |
18 CLibrary::~CLibrary() | |
19 { | |
20 Free(); | |
21 } | |
22 | |
23 bool CLibrary::Free() | |
24 { | |
25 if (_module == 0) | |
26 return true; | |
27 // MessageBox(0, TEXT(""), TEXT("Free"), 0); | |
28 // Sleep(5000); | |
29 if (!::FreeLibrary(_module)) | |
30 return false; | |
31 _module = 0; | |
32 return true; | |
33 } | |
34 | |
35 bool CLibrary::LoadOperations(HMODULE newModule) | |
36 { | |
37 if (newModule == NULL) | |
38 return false; | |
39 if (!Free()) | |
40 return false; | |
41 _module = newModule; | |
42 return true; | |
43 } | |
44 | |
45 bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags) | |
46 { | |
47 // MessageBox(0, fileName, TEXT("LoadEx"), 0); | |
48 return LoadOperations(::LoadLibraryEx(fileName, NULL, flags)); | |
49 } | |
50 | |
51 bool CLibrary::Load(LPCTSTR fileName) | |
52 { | |
53 // MessageBox(0, fileName, TEXT("Load"), 0); | |
54 // Sleep(5000); | |
55 // OutputDebugString(fileName); | |
56 // OutputDebugString(TEXT("\n")); | |
57 return LoadOperations(::LoadLibrary(fileName)); | |
58 } | |
59 | |
60 #ifndef _UNICODE | |
61 static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP :
CP_OEMCP; } | |
62 CSysString GetSysPath(LPCWSTR sysPath) | |
63 { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); } | |
64 | |
65 bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags) | |
66 { | |
67 if (g_IsNT) | |
68 return LoadOperations(::LoadLibraryExW(fileName, NULL, flags)); | |
69 return LoadEx(GetSysPath(fileName), flags); | |
70 } | |
71 bool CLibrary::Load(LPCWSTR fileName) | |
72 { | |
73 if (g_IsNT) | |
74 return LoadOperations(::LoadLibraryW(fileName)); | |
75 return Load(GetSysPath(fileName)); | |
76 } | |
77 #endif | |
78 | |
79 bool MyGetModuleFileName(HMODULE hModule, CSysString &result) | |
80 { | |
81 result.Empty(); | |
82 TCHAR fullPath[MAX_PATH + 2]; | |
83 DWORD size = ::GetModuleFileName(hModule, fullPath, MAX_PATH + 1); | |
84 if (size <= MAX_PATH && size != 0) | |
85 { | |
86 result = fullPath; | |
87 return true; | |
88 } | |
89 return false; | |
90 } | |
91 | |
92 #ifndef _UNICODE | |
93 bool MyGetModuleFileName(HMODULE hModule, UString &result) | |
94 { | |
95 result.Empty(); | |
96 if (g_IsNT) | |
97 { | |
98 wchar_t fullPath[MAX_PATH + 2]; | |
99 DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1); | |
100 if (size <= MAX_PATH && size != 0) | |
101 { | |
102 result = fullPath; | |
103 return true; | |
104 } | |
105 return false; | |
106 } | |
107 CSysString resultSys; | |
108 if (!MyGetModuleFileName(hModule, resultSys)) | |
109 return false; | |
110 result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage()); | |
111 return true; | |
112 } | |
113 #endif | |
114 | |
115 }} | |
OLD | NEW |