| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- // Windows/DLL.cpp
- #include "StdAfx.h"
- #include "DLL.h"
- #include "Defs.h"
- #ifndef _UNICODE
- #include "../Common/StringConvert.h"
- #endif
- #ifndef _UNICODE
- extern bool g_IsNT;
- #endif
- namespace NWindows {
- namespace NDLL {
- CLibrary::~CLibrary()
- {
- Free();
- }
- bool CLibrary::Free()
- {
- if (_module == 0)
- return true;
- // MessageBox(0, TEXT(""), TEXT("Free"), 0);
- // Sleep(5000);
- if (!::FreeLibrary(_module))
- return false;
- _module = 0;
- return true;
- }
- bool CLibrary::LoadOperations(HMODULE newModule)
- {
- if (newModule == NULL)
- return false;
- if(!Free())
- return false;
- _module = newModule;
- return true;
- }
- bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags)
- {
- // MessageBox(0, fileName, TEXT("LoadEx"), 0);
- return LoadOperations(::LoadLibraryEx(fileName, NULL, flags));
- }
- bool CLibrary::Load(LPCTSTR fileName)
- {
- // MessageBox(0, fileName, TEXT("Load"), 0);
- // Sleep(5000);
- // OutputDebugString(fileName);
- // OutputDebugString(TEXT("\n"));
- return LoadOperations(::LoadLibrary(fileName));
- }
- #ifndef _UNICODE
- static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; }
- CSysString GetSysPath(LPCWSTR sysPath)
- { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); }
- bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags)
- {
- if (g_IsNT)
- return LoadOperations(::LoadLibraryExW(fileName, NULL, flags));
- return LoadEx(GetSysPath(fileName), flags);
- }
- bool CLibrary::Load(LPCWSTR fileName)
- {
- if (g_IsNT)
- return LoadOperations(::LoadLibraryW(fileName));
- return Load(GetSysPath(fileName));
- }
- #endif
- bool MyGetModuleFileName(HMODULE hModule, CSysString &result)
- {
- result.Empty();
- TCHAR fullPath[MAX_PATH + 2];
- DWORD size = ::GetModuleFileName(hModule, fullPath, MAX_PATH + 1);
- if (size <= MAX_PATH && size != 0)
- {
- result = fullPath;
- return true;
- }
- return false;
- }
- #ifndef _UNICODE
- bool MyGetModuleFileName(HMODULE hModule, UString &result)
- {
- result.Empty();
- if (g_IsNT)
- {
- wchar_t fullPath[MAX_PATH + 2];
- DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1);
- if (size <= MAX_PATH && size != 0)
- {
- result = fullPath;
- return true;
- }
- return false;
- }
- CSysString resultSys;
- if (!MyGetModuleFileName(hModule, resultSys))
- return false;
- result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage());
- return true;
- }
- #endif
- }}
|