// 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();
IArchiveOpenCallback *callback;
CSysString const path;
UString ustrDefaultName;
+ bool passwordIsDefined;
+ UString password;
NFile::NFind::CFileInfo fileInfo;
Inspector(Format7zDLL::Interface *, LPCTSTR);
void Init(HWND);
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);
};