mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-14 18:11:41 -06:00
3.13
This commit is contained in:
113
Windows/DLL.cpp
Executable file
113
Windows/DLL.cpp
Executable file
@@ -0,0 +1,113 @@
|
||||
// Windows/DLL.cpp
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "DLL.h"
|
||||
#include "Defs.h"
|
||||
#ifndef _UNICODE
|
||||
#include "../Common/StringConvert.h"
|
||||
#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; }
|
||||
bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags)
|
||||
{
|
||||
HMODULE module = ::LoadLibraryExW(fileName, NULL, flags);
|
||||
if (module != 0)
|
||||
return LoadOperations(module);
|
||||
if (::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return false;
|
||||
return LoadEx(UnicodeStringToMultiByte(fileName, GetCurrentCodePage()), flags);
|
||||
}
|
||||
bool CLibrary::Load(LPCWSTR fileName)
|
||||
{
|
||||
HMODULE module = ::LoadLibraryW(fileName);
|
||||
if (module != 0)
|
||||
return LoadOperations(module);
|
||||
if (::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return false;
|
||||
return Load(UnicodeStringToMultiByte(fileName, GetCurrentCodePage()));
|
||||
}
|
||||
#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();
|
||||
wchar_t fullPath[MAX_PATH + 2];
|
||||
DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1);
|
||||
if (size <= MAX_PATH && size != 0)
|
||||
{
|
||||
result = fullPath;
|
||||
return true;
|
||||
}
|
||||
if (::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
|
||||
return false;
|
||||
CSysString resultSys;
|
||||
if (!MyGetModuleFileName(hModule, resultSys))
|
||||
return false;
|
||||
result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage());
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
}}
|
||||
Reference in New Issue
Block a user