1 // DLLExports2.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "../../Common/MyWindows.h"
6 
7 #include "../../Common/MyInitGuid.h"
8 
9 #if defined(_7ZIP_LARGE_PAGES)
10 #include "../../../C/Alloc.h"
11 #endif
12 
13 #include "../../Common/ComTry.h"
14 
15 #include "../../Windows/NtCheck.h"
16 #include "../../Windows/PropVariant.h"
17 
18 #include "../ICoder.h"
19 #include "../IPassword.h"
20 
21 #include "../Common/CreateCoder.h"
22 
23 #include "IArchive.h"
24 
25 HINSTANCE g_hInstance;
26 
27 #define NT_CHECK_FAIL_ACTION return FALSE;
28 
29 #ifdef _WIN32
30 extern "C"
DllMain(HANDLE hInstance,DWORD dwReason,LPVOID)31 BOOL WINAPI DllMain(
32   #ifdef UNDER_CE
33   HANDLE
34   #else
35   HINSTANCE
36   #endif
37   hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
38 {
39   if (dwReason == DLL_PROCESS_ATTACH)
40   {
41     // OutputDebugStringA("7z.dll DLL_PROCESS_ATTACH");
42     g_hInstance = (HINSTANCE)hInstance;
43     NT_CHECK;
44   }
45   /*
46   if (dwReason == DLL_PROCESS_DETACH)
47   {
48     OutputDebugStringA("7z.dll DLL_PROCESS_DETACH");
49   }
50   */
51   return TRUE;
52 }
53 #endif
54 
55 DEFINE_GUID(CLSID_CArchiveHandler,
56     k_7zip_GUID_Data1,
57     k_7zip_GUID_Data2,
58     k_7zip_GUID_Data3_Common,
59     0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00);
60 
61 STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject);
62 STDAPI CreateHasher(const GUID *clsid, IHasher **hasher);
63 STDAPI CreateArchiver(const GUID *clsid, const GUID *iid, void **outObject);
64 
CreateObject(const GUID * clsid,const GUID * iid,void ** outObject)65 STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject)
66 {
67   // COM_TRY_BEGIN
68   *outObject = 0;
69   if (*iid == IID_ICompressCoder ||
70       *iid == IID_ICompressCoder2 ||
71       *iid == IID_ICompressFilter)
72     return CreateCoder(clsid, iid, outObject);
73   if (*iid == IID_IHasher)
74     return CreateHasher(clsid, (IHasher **)outObject);
75   return CreateArchiver(clsid, iid, outObject);
76   // COM_TRY_END
77 }
78 
SetLargePageMode()79 STDAPI SetLargePageMode()
80 {
81   #if defined(_7ZIP_LARGE_PAGES)
82   SetLargePageSize();
83   #endif
84   return S_OK;
85 }
86 
87 extern bool g_CaseSensitive;
88 
SetCaseSensitive(Int32 caseSensitive)89 STDAPI SetCaseSensitive(Int32 caseSensitive)
90 {
91   g_CaseSensitive = (caseSensitive != 0);
92   return S_OK;
93 }
94 
95 #ifdef EXTERNAL_CODECS
96 
97 CExternalCodecs g_ExternalCodecs;
98 
SetCodecs(ICompressCodecsInfo * compressCodecsInfo)99 STDAPI SetCodecs(ICompressCodecsInfo *compressCodecsInfo)
100 {
101   COM_TRY_BEGIN
102 
103   // OutputDebugStringA(compressCodecsInfo ? "SetCodecs" : "SetCodecs NULL");
104   if (compressCodecsInfo)
105   {
106     g_ExternalCodecs.GetCodecs = compressCodecsInfo;
107     return g_ExternalCodecs.Load();
108   }
109   g_ExternalCodecs.ClearAndRelease();
110   return S_OK;
111 
112   COM_TRY_END
113 }
114 
115 #else
116 
SetCodecs(ICompressCodecsInfo *)117 STDAPI SetCodecs(ICompressCodecsInfo *)
118 {
119   return S_OK;
120 }
121 
122 #endif
123