\r
// EXTRACTINGINFOEXW -> TPI_FILEINFO変換。\r
piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
- piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
+ piInfo.fiInfo.tmModified.SetFromDOS(MAKELONG(ex->wTime, ex->wDate));\r
piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
piInfo.fiInfo.eOSType = ex->uOSType;\r
\r
// EXTRACTINGINFOEX -> TPI_FILEINFO変換。\r
piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
- piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
+ piInfo.fiInfo.tmModified.SetFromDOS(MAKELONG(ex->wTime, ex->wDate));\r
piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
piInfo.fiInfo.eOSType = ex->uOSType;\r
return nErrorCode;\r
}\r
\r
+#define MySetArcSize(api_base, var) \\r
+ fpProc = ::GetAPIAddress(#api_base L"Ex", false); \\r
+ if (fpProc != NULL) \\r
+ { \\r
+ ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->var); \\r
+ } \\r
+ else \\r
+ { \\r
+ fpProc = ::GetAPIAddress(#api_base, false); \\r
+ if (fpProc != NULL) \\r
+ { \\r
+ _aiInfo->var = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+ } \\r
+ }\r
+\r
+#define MySetArcTime(api_base, var, ismod) \\r
+ fpProc = ::GetAPIAddress(#api_base L"64", false); \\r
+ if (fpProc != NULL) \\r
+ { \\r
+ ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, & ll); \\r
+ _aiInfo->var.Set((time_t) ll); \\r
+ } \\r
+ else \\r
+ { \\r
+ fpProc = ::GetAPIAddress(#api_base L"Ex", false); \\r
+ if (fpProc != NULL) \\r
+ { \\r
+ ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft); \\r
+ _aiInfo->var = FileTimeToWxDateTime(& ft); \\r
+ } \\r
+ else \\r
+ { \\r
+ fpProc = ::GetAPIAddress(#api_base, false); \\r
+ if (fpProc != NULL) \\r
+ { \\r
+ _aiInfo->var.Set((time_t) ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive)); \\r
+ } \\r
+ else \\r
+ { \\r
+ if (ismod) \\r
+ { \\r
+ fpProc = ::GetAPIAddress("GetArcDate", false); \\r
+ WORD wDate = fpProc == NULL ? 0 : ((WORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+ fpProc = ::GetAPIAddress("GetArcTime", false); \\r
+ WORD wTime = fpProc == NULL ? 0 : ((WORD (__stdcall *)(void *)) fpProc)(_hArchive); \\r
+ _aiInfo->var.SetFromDOS(MAKELONG(wTime, wDate)); \\r
+ } \\r
+ } \\r
+ } \\r
+ }\r
+\r
int __stdcall GetArchiveInformation\r
(\r
void * _hArchive,\r
_aiInfo->fnArchive = wxFileName(s);\r
}\r
\r
- fpProc = ::GetAPIAddress("GetArcFileSizeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nFileSize);\r
- }\r
- else\r
- {\r
- fpProc = ::GetAPIAddress("GetArcFileSize", false);\r
- if (fpProc != NULL)\r
- {\r
- _aiInfo->nFileSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
- }\r
- }\r
-\r
- fpProc = ::GetAPIAddress("GetArcOriginalSizeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nUnpackedSize);\r
- }\r
- else\r
- {\r
- fpProc = ::GetAPIAddress("GetArcOriginalSize", false);\r
- if (fpProc != NULL)\r
- {\r
- _aiInfo->nUnpackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
- }\r
- }\r
-\r
- fpProc = ::GetAPIAddress("GetArcCompressedSizeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nPackedSize);\r
- }\r
- else\r
- {\r
- fpProc = ::GetAPIAddress("GetArcCompressedSize", false);\r
- if (fpProc != NULL)\r
- {\r
- _aiInfo->nPackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
- }\r
- }\r
+ wxLongLong_t ll = 0;\r
+ MySetArcSize(GetArcFileSize, nFileSize);\r
+ MySetArcSize(GetArcOriginalSize, nUnpackedSize);\r
+ MySetArcSize(GetArcCompressedSize, nPackedSize);\r
+ MySetArcSize(GetArcReadSize, nReadSize);\r
\r
- fpProc = ::GetAPIAddress("GetArcReadSizeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nReadSize);\r
- }\r
- else\r
- {\r
- fpProc = ::GetAPIAddress("GetArcReadSize", false);\r
- if (fpProc != NULL)\r
- {\r
- _aiInfo->nReadSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
- }\r
- }\r
+ FILETIME ft;\r
+ MySetArcTime(GetArcAccessTime, tmAccess, false);\r
+ MySetArcTime(GetArcCreateTime, tmCreate, false);\r
+ MySetArcTime(GetArcWriteTime, tmModified, true);\r
\r
fpProc = ::GetAPIAddress("GetArcRatio", false);\r
if (fpProc != NULL)\r
_aiInfo->wCompressRatio = ((WORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
}\r
\r
- FILETIME ft;\r
- fpProc = ::GetAPIAddress("GetArcAccessTimeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
- _aiInfo->tmAccess = FileTimeToWxDateTime(& ft);\r
- }\r
-\r
- fpProc = ::GetAPIAddress("GetArcCreatedTimeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
- _aiInfo->tmCreate = FileTimeToWxDateTime(& ft);\r
- }\r
-\r
- fpProc = ::GetAPIAddress("GetArcWriteTimeEx", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);\r
- _aiInfo->tmModified = FileTimeToWxDateTime(& ft);\r
- }\r
-\r
fpProc = ::GetAPIAddress("GetArcOSType", false);\r
if (fpProc != NULL)\r
{\r