Browse Source

Finish workaround. It works 💪

Martijn Laan 11 months ago
parent
commit
d0f6c549d3

+ 81 - 0
Projects/Src/Compression.SevenZipDecoder.pas

@@ -36,6 +36,87 @@ begin
   Result := CreateDirectoryW(lpPathName, lpSecurityAttributes);
 end;
 
+function __CreateFileA(lpFileName: LPCSTR; dwDesiredAccess, dwShareMode: DWORD;
+  lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
+  hTemplateFile: THandle): THandle; cdecl;
+begin
+  Result := CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
+end;
+
+function __CreateFileW(lpFileName: LPCWSTR; dwDesiredAccess, dwShareMode: DWORD;
+  lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
+  hTemplateFile: THandle): THandle; cdecl;
+begin
+  Result := CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
+end;
+
+function __FileTimeToLocalFileTime(lpFileTime: PFileTime; var lpLocalFileTime: TFileTime): BOOL; cdecl;
+begin
+  Result := FileTimeToLocalFileTime(lpFileTime, lpLocalFileTime);
+end;
+
+function __GetFileSize(hFile: THandle; lpFileSizeHigh: Pointer): DWORD; cdecl;
+begin
+  Result := GetFileSize(hFile, lpFileSizeHigh);
+end;
+
+function __ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;
+  var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; cdecl;
+begin
+  Result := ReadFile(hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
+end;
+
+function __SetFileAttributesW(lpFileName: LPCWSTR; dwFileAttributes: DWORD): BOOL; cdecl;
+begin
+  Result := SetFileAttributesW(lpFileName, dwFileAttributes);
+end;
+
+function __SetFilePointer(hFile: THandle; lDistanceToMove: Longint;
+  lpDistanceToMoveHigh: Pointer; dwMoveMethod: DWORD): DWORD; cdecl;
+begin
+  Result := SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);
+end;
+
+function __SetFileTime(hFile: THandle;
+  lpCreationTime, lpLastAccessTime, lpLastWriteTime: PFileTime): BOOL; cdecl;
+begin
+  Result := SetFileTime(hFile, lpCreationTime, lpLastAccessTime, lpLastWriteTime);
+end;
+
+function __WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
+  var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; cdecl;
+begin
+  Result := WriteFile(hFile, Buffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);
+end;
+
+function __CloseHandle(hObject: THandle): BOOL; cdecl;
+begin
+  Result := CloseHandle(hObject);
+end;
+
+function __GetLastError: DWORD; cdecl;
+begin
+  Result := GetLastError;
+end;
+
+function __LocalFree(hMem: HLOCAL): HLOCAL; cdecl;
+begin
+  Result := LocalFree(hMem);
+end;
+
+function __FormatMessageA(dwFlags: DWORD; lpSource: Pointer; dwMessageId: DWORD; dwLanguageId: DWORD;
+  lpBuffer: LPSTR; nSize: DWORD; Arguments: Pointer): DWORD; cdecl;
+begin
+  Result := FormatMessageA(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
+end;
+
+function __WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD;
+  lpWideCharStr: LPWSTR; cchWideChar: Integer; lpMultiByteStr: LPSTR;
+  cchMultiByte: Integer; lpDefaultChar: LPCSTR; lpUsedDefaultChar: PBOOL): Integer; cdecl;
+begin
+  Result := WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cchMultiByte, lpDefaultChar, lpUsedDefaultChar);
+end;
+
 procedure __allshl; register; external 'ntdll.dll' name '_allshl';
 procedure __aullshr; register; external 'ntdll.dll' name '_aullshr';
 {$ELSE}

+ 42 - 0
Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.c

@@ -17,6 +17,48 @@
 BOOL _CreateDirectoryW(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
 #define CreateDirectoryW _CreateDirectoryW
 
+HANDLE _CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
+#define CreateFileA _CreateFileA
+
+HANDLE _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
+#define CreateFileW _CreateFileW
+
+BOOL _FileTimeToLocalFileTime(FILETIME* lpFileTime, LPFILETIME lpLocalFileTime);
+#define FileTimeToLocalFileTime _FileTimeToLocalFileTime
+
+DWORD _GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
+#define GetFileSize _GetFileSize
+
+BOOL _ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
+#define ReadFile _ReadFile
+
+BOOL _SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes);
+#define SetFileAttributesW _SetFileAttributesW
+
+DWORD _SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
+#define SetFilePointer _SetFilePointer
+
+BOOL _SetFileTime(HANDLE hFile, FILETIME* lpCreationTime, FILETIME* lpLastAccessTime, FILETIME* lpLastWriteTime);
+#define SetFileTime _SetFileTime
+
+BOOL _WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
+#define WriteFile _WriteFile
+
+BOOL _CloseHandle(HANDLE hObject);
+#define CloseHandle _CloseHandle
+
+DWORD _GetLastError(VOID);
+#define GetLastError _GetLastError
+
+HLOCAL _LocalFree(HLOCAL hMem);
+#define LocalFree _LocalFree
+
+DWORD _FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, va_list *Arguments);
+#define FormatMessageA _FormatMessageA
+
+int _WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWCH lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCCH lpDefaultChar, LPBOOL lpUsedDefaultChar);
+#define WideCharToMultiByte _WideCharToMultiByte
+
 #endif
 
 #include "../../../../Components/Lzma2/Util/7z/7zMain.c"

BIN
Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.obj