rlm@1: // DLLExports.cpp rlm@1: rlm@1: #include "StdAfx.h" rlm@1: rlm@1: #include "../../Common/MyInitGuid.h" rlm@1: #include "../../Common/ComTry.h" rlm@1: #include "../../Common/Types.h" rlm@1: #include "../../Windows/PropVariant.h" rlm@1: #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) rlm@1: extern "C" rlm@1: { rlm@1: #include "../../../C/Alloc.h" rlm@1: } rlm@1: #endif rlm@1: rlm@1: #include "IArchive.h" rlm@1: #include "../ICoder.h" rlm@1: #include "../IPassword.h" rlm@1: rlm@1: HINSTANCE g_hInstance; rlm@1: #ifndef _UNICODE rlm@1: #ifdef _WIN32 rlm@1: bool g_IsNT = false; rlm@1: static bool IsItWindowsNT() rlm@1: { rlm@1: OSVERSIONINFO versionInfo; rlm@1: versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); rlm@1: if (!::GetVersionEx(&versionInfo)) rlm@1: return false; rlm@1: return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); rlm@1: } rlm@1: #endif rlm@1: #endif rlm@1: rlm@1: extern "C" rlm@1: BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) rlm@1: { rlm@1: if (dwReason == DLL_PROCESS_ATTACH) rlm@1: { rlm@1: g_hInstance = hInstance; rlm@1: #ifndef _UNICODE rlm@1: #ifdef _WIN32 rlm@1: g_IsNT = IsItWindowsNT(); rlm@1: #endif rlm@1: #endif rlm@1: } rlm@1: return TRUE; rlm@1: } rlm@1: rlm@1: DEFINE_GUID(CLSID_CArchiveHandler, rlm@1: 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); rlm@1: rlm@1: static const UInt16 kDecodeId = 0x2790; rlm@1: rlm@1: DEFINE_GUID(CLSID_CCodec, rlm@1: 0x23170F69, 0x40C1, kDecodeId, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); rlm@1: rlm@1: STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject); rlm@1: STDAPI CreateArchiver(const GUID *classID, const GUID *iid, void **outObject); rlm@1: rlm@1: STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject) rlm@1: { rlm@1: // COM_TRY_BEGIN rlm@1: *outObject = 0; rlm@1: if (*iid == IID_ICompressCoder || *iid == IID_ICompressCoder2 || *iid == IID_ICompressFilter) rlm@1: { rlm@1: return CreateCoder(clsid, iid, outObject); rlm@1: } rlm@1: else rlm@1: { rlm@1: return CreateArchiver(clsid, iid, outObject); rlm@1: } rlm@1: // COM_TRY_END rlm@1: } rlm@1: rlm@1: STDAPI SetLargePageMode() rlm@1: { rlm@1: #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) rlm@1: SetLargePageSize(); rlm@1: #endif rlm@1: return S_OK; rlm@1: }