OSDN Git Service

Merge7z DllBuild 0028
[winmerge-jp/winmerge-jp.git] / ArchiveSupport / Merge7z / Merge7zCommon.h
index ce2337e..3965834 100755 (executable)
@@ -1,63 +1,81 @@
 // includes from 7-Zip sources
+
+#include "7zip/MyVersion.h"
 #include "7zip/Archive/IArchive.h"
 #include "Common/StringConvert.h"
 #include "Windows/PropVariant.h"
 #include "Windows/PropVariantConversions.h"
 #include "Windows/FileDir.h"
 #include "Windows/FileFind.h"
-#include "Windows/Thread.h"
+
 #include "7zip/UI/Common/DirItem.h"
 #include "7zip/Common/FileStreams.h"
+
 // Merge7z includes
 #include "tools.h"
-#define DllBuild_Merge7z 12
+#define DllBuild_Merge7z 28
 #define DLLPSTUB /##/
 #include "Merge7z.h"
 
+typedef char SZ_EXTENSION[8];
+typedef char CH_SIGNATURE[512]; //MAX(4 + IMAGE_SIZEOF_FILE_HEADER, 512)
+
 using namespace NWindows;
 
 extern HINSTANCE g_hInstance;
 extern DWORD g_dwFlags;
 extern CHAR g_cPath7z[MAX_PATH];
 
-typedef UINT32 (WINAPI * CreateObjectFunc)(
-       const GUID *clsID, 
-       const GUID *interfaceID, 
-       void **outObject);
-
-typedef UINT32 (WINAPI * GetHandlerPropertyFunc)(
-       PROPID propID, PROPVARIANT *value);
-
 struct Format7zDLL
 {
-       HMODULE origin;
-       CreateObjectFunc CreateObject;
-       GetHandlerPropertyFunc GetHandlerProperty;
-       HMODULE handle;
-       const CLSID *clsid;
        struct Proxy;
        interface Interface;
 };
 
 struct Format7zDLL::Proxy
 {
-       LPCSTR Format7zDLL
-       [
-               &((struct Format7zDLL *)0)->handle
-       -       &((struct Format7zDLL *)0)->origin
-       ];
-       HMODULE handle;
-       const CLSID *clsid;
-       struct Format7zDLL *operator->();
+       INT32 formatIndex;
+       WORD sig_begin;
+       BYTE sig_count;
+       char sig_joker;
+       const char *extension;
+       STDMETHODIMP CreateObject(const GUID *clsID, const GUID *interfaceID, void **outObject);
+       STDMETHODIMP GetHandlerProperty(PROPID propID, PROPVARIANT *value);
+       static struct Handle
+       {
+               const char *aModule;
+               union
+               {
+                       const char *aCreateObject;
+                       HRESULT(STDAPICALLTYPE*CreateObject)(const GUID *clsID, const GUID *interfaceID, void **outObject);
+               };
+               union
+               {
+                       const char *aGetHandlerProperty2;
+                       HRESULT(STDAPICALLTYPE*GetHandlerProperty2)(UINT32 formatIndex, PROPID propID, PROPVARIANT *value);
+               };
+               union
+               {
+                       const char *aGetNumberOfFormats;
+                       HRESULT(STDAPICALLTYPE*GetNumberOfFormats)(UINT32 *numFormats);
+               };
+               HMODULE handle;
+               operator HMODULE() { return handle; }
+       } handle;
+       struct Proxy *operator->();
 };
 
 interface Format7zDLL::Interface : Merge7z::Format
 {
        Proxy &proxy;
-       Interface(Proxy &proxy):proxy(proxy)
+       static Interface *head;
+       Interface *next;
+       Interface(Proxy &proxy):proxy(proxy), next(head)
        {
+               head = this;
        }
        void GetDefaultName(HWND, UString &);
+       virtual HRESULT CreateObject(const GUID *interfaceID, void **outObject);
        virtual IInArchive *GetInArchive();
        virtual HRESULT DeCompressArchive(HWND, LPCTSTR path, LPCTSTR folder);
        virtual IOutArchive *GetOutArchive();
@@ -80,6 +98,8 @@ interface Format7zDLL::Interface : Merge7z::Format
                IArchiveOpenCallback *callback;
                CSysString const path;
                UString ustrDefaultName;
+               bool passwordIsDefined;
+               UString password;
                NFile::NFind::CFileInfo fileInfo;
                Inspector(Format7zDLL::Interface *, LPCTSTR);
                void Init(HWND);
@@ -94,8 +114,9 @@ interface Format7zDLL::Interface : Merge7z::Format
                IOutArchive *outArchive;
                COutFileStream *file;
                CSysString const path;
-               CObjectVector<CDirItem> dirItems;
-               CObjectVector<CArchiveItem> archiveItems;
+               //CObjectVector<CDirItem> dirItems;
+               CDirItems dirItems;
+               CObjectVector<CArcItem> archiveItems;
                Updater(Format7zDLL::Interface *, LPCTSTR);
                void Init(HWND);
        };