1 /*******************************************************************************
\r
2 TPI - flexible but useless plug-in framework.
\r
3 Copyright (C) 2002-2009 Silky
\r
5 This library is free software; you can redistribute it and/or modify it under
\r
6 the terms of the GNU Lesser General Public License as published by the Free
\r
7 Software Foundation; either version 2.1 of the License, or (at your option)
\r
10 This library is distributed in the hope that it will be useful, but WITHOUT
\r
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
\r
15 You should have received a copy of the GNU Lesser General Public License along
\r
16 with this library; if not, write to the Free Software Foundation, Inc.,
\r
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
\r
19 $Id: calLibrary.cpp,v 1.23 2009/09/27 13:44:12 sirakaba Exp $
\r
20 *******************************************************************************/
\r
22 //******************************************************************************
\r
24 //******************************************************************************
\r
26 #include "../../common/header/plugin.h"
\r
27 #include "../../common/header/plugin-extra.h"
\r
28 #include "../../common/library/library.h"
\r
29 #include <wx/dynlib.h>
\r
30 #include <wx/config.h>
\r
31 #include <wx/stdpaths.h>
\r
32 #include <wx/xml/xml.h>
\r
33 #include <windows.h>
\r
34 #include "calLibrary.h"
\r
36 //******************************************************************************
\r
38 //******************************************************************************
\r
47 bool fCallback32bit;
\r
49 } g_LibInfo, g_LibInfoAlt;
\r
52 bool g_fExistUnicodeMode;
\r
54 //******************************************************************************
\r
56 //******************************************************************************
\r
59 void __attribute__((destructor)) Detach(void)
\r
61 ::FreeLibrary(g_LibInfo.hLib);
\r
62 ::FreeLibrary(g_LibInfo.hLibAlt);
\r
65 BOOL __stdcall DllMain(HMODULE, DWORD fdwReason, void *)
\r
69 case DLL_PROCESS_DETACH:
\r
70 ::FreeLibrary(g_LibInfo.hLib);
\r
77 wxDateTime FileTimeToWxDateTime(FILETIME * pft)
\r
82 if (! ::FileTimeToLocalFileTime(pft, & ftLocal) || ! ::FileTimeToSystemTime(& ftLocal, & st))
\r
86 wxDateTime dt(st.wDay, wxDateTime::Month(st.wMonth - 1), st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
\r
93 //******************************************************************************
\r
95 //******************************************************************************
\r
97 BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void * _lpEis)
\r
99 if (_uMsg != ::RegisterWindowMessage((const wchar_t *) WM_ARCEXTRACT))
\r
101 //
\93Æ
\8e©
\8ed
\97l
\82È
\82Ç
\82É
\91Î
\82·
\82é
\97\
\94õ
\83R
\81[
\83h
\81B
\r
105 //
\8d\
\91¢
\91Ì
\82ð
\8f\89\8aú
\89»
\81B
\r
106 TPI_PROCESSINFO piInfo;
\r
107 piInfo.uMessage = TPI_MESSAGE_STATUS;
\r
109 if (_lpEis != NULL)
\r
111 if ((g_LibInfo.fRunning && g_LibInfo.fCallback32bit) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fCallback32bit))
\r
113 if ((g_LibInfo.fRunning && g_LibInfo.fUnicode) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fUnicode))
\r
115 //
\8f\89\8aú
\89»
\81B
\r
116 EXTRACTINGINFOEXW * ex = (EXTRACTINGINFOEXW *) _lpEis;
\r
118 // EXTRACTINGINFOEXW -> TPI_FILEINFO
\95Ï
\8a·
\81B
\r
119 piInfo.fiInfo.dwCRC32 = ex->dwCRC;
\r
120 piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));
\r
121 piInfo.fiInfo.llPackedSize = ex->dwCompressedSize;
\r
122 piInfo.fiInfo.llUnpackedSize = ex->exinfo.dwFileSize;
\r
123 piInfo.fiInfo.uOSType = ex->uOSType;
\r
124 piInfo.fiInfo.wCompressRatio = ex->wRatio;
\r
125 piInfo.fiInfo.szStoredName = WC2String(ex->exinfo.szSourceFileName);
\r
126 piInfo.fiInfo.szMethod = WC2String(ex->szMode);
\r
128 // EXTRACTINGINFOEXW -> TPI_PROCESSINFO
\95Ï
\8a·
\81B
\r
129 piInfo.llProcessedSize = ex->exinfo.dwWriteSize;
\r
130 piInfo.fnDestination = wxFileName::FileName(WC2String(ex->exinfo.szDestFileName));
\r
134 //
\8f\89\8aú
\89»
\81B
\r
135 EXTRACTINGINFOEX * ex = (EXTRACTINGINFOEX *) _lpEis;
\r
137 // EXTRACTINGINFOEX -> TPI_FILEINFO
\95Ï
\8a·
\81B
\r
138 piInfo.fiInfo.dwCRC32 = ex->dwCRC;
\r
139 piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));
\r
140 piInfo.fiInfo.llPackedSize = ex->dwCompressedSize;
\r
141 piInfo.fiInfo.llUnpackedSize = ex->exinfo.dwFileSize;
\r
142 piInfo.fiInfo.uOSType = ex->uOSType;
\r
143 piInfo.fiInfo.wCompressRatio = ex->wRatio;
\r
144 piInfo.fiInfo.szStoredName = MB2String(ex->exinfo.szSourceFileName);
\r
145 piInfo.fiInfo.szMethod = MB2String(ex->szMode);
\r
147 // EXTRACTINGINFOEX -> TPI_PROCESSINFO
\95Ï
\8a·
\81B
\r
148 piInfo.llProcessedSize = ex->exinfo.dwWriteSize;
\r
149 piInfo.fnDestination = wxFileName::FileName(MB2String(ex->exinfo.szDestFileName));
\r
151 piInfo.fiInfo.dwAttribute = 0;
\r
155 if ((g_LibInfo.fRunning && g_LibInfo.fUnicode) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fUnicode))
\r
157 //
\8f\89\8aú
\89»
\81B
\r
158 EXTRACTINGINFOEX64W * ex = (EXTRACTINGINFOEX64W *) _lpEis;
\r
160 // EXTRACTINGINFOEX64W -> TPI_FILEINFO
\95Ï
\8a·
\81B
\r
161 piInfo.fiInfo.dwAttribute = ex->dwAttributes;
\r
162 piInfo.fiInfo.dwCRC32 = ex->dwCRC;
\r
163 piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);
\r
164 piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);
\r
165 piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);
\r
166 piInfo.fiInfo.llPackedSize = ex->llCompressedSize;
\r
167 piInfo.fiInfo.llUnpackedSize = ex->llFileSize;
\r
168 piInfo.fiInfo.uOSType = ex->uOSType;
\r
169 piInfo.fiInfo.wCompressRatio = ex->wRatio;
\r
170 piInfo.fiInfo.szStoredName = WC2String(ex->exinfo.szSourceFileName);
\r
171 piInfo.fiInfo.szMethod = WC2String(ex->szMode);
\r
173 // EXTRACTINGINFOEX64 -> TPI_PROCESSINFO
\95Ï
\8a·
\81B
\r
174 piInfo.llProcessedSize = ex->llWriteSize;
\r
175 piInfo.fnDestination = wxFileName::FileName(WC2String(ex->exinfo.szDestFileName));
\r
179 //
\8f\89\8aú
\89»
\81B
\r
180 EXTRACTINGINFOEX64 * ex = (EXTRACTINGINFOEX64 *) _lpEis;
\r
182 // EXTRACTINGINFOEX64 -> TPI_FILEINFO
\95Ï
\8a·
\81B
\r
183 piInfo.fiInfo.dwAttribute = ex->dwAttributes;
\r
184 piInfo.fiInfo.dwCRC32 = ex->dwCRC;
\r
185 piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);
\r
186 piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);
\r
187 piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);
\r
188 piInfo.fiInfo.llPackedSize = ex->llCompressedSize;
\r
189 piInfo.fiInfo.llUnpackedSize = ex->llFileSize;
\r
190 piInfo.fiInfo.uOSType = ex->uOSType;
\r
191 piInfo.fiInfo.wCompressRatio = ex->wRatio;
\r
192 piInfo.fiInfo.szStoredName = MB2String(ex->exinfo.szSourceFileName);
\r
193 piInfo.fiInfo.szMethod = MB2String(ex->szMode);
\r
195 // EXTRACTINGINFOEX64 -> TPI_PROCESSINFO
\95Ï
\8a·
\81B
\r
196 piInfo.llProcessedSize = ex->llWriteSize;
\r
197 piInfo.fnDestination = wxFileName::FileName(MB2String(ex->exinfo.szDestFileName));
\r
200 piInfo.fiInfo.fnFileName = wxFileName::FileName(piInfo.fiInfo.szStoredName);
\r
203 //
\90\94\8e\9a\82Ì
\8f\87\82Å
\82È
\82
\8f\88\97\9d\82Ì
\8f\87\82Å
\95À
\82ñ
\82Å
\82¢
\82é
\82±
\82Æ
\82É
\92\8d\88Ó
\81B
\r
206 case ARCEXTRACT_OPEN:
\r
207 //
\93\96\8aY
\8f\91\8cÉ
\82Ì
\8f\88\97\9d\82ð
\8aJ
\8en
\81B
\r
208 piInfo.uStatus = TPI_STATUS_OPENARCHIVE;
\r
211 //
\93\96\8aY
\83t
\83@
\83C
\83\8b\82Ì
\8c\9f\8dõ
\92\86\81B
\r
212 piInfo.uStatus = TPI_STATUS_SEEKFILE;
\r
214 case ARCEXTRACT_BEGIN:
\r
215 //
\93\96\8aY
\83t
\83@
\83C
\83\8b\82Ì
\8f\88\97\9d\82ð
\8aJ
\8en
\81B
\r
216 piInfo.uStatus = TPI_STATUS_BEGINPROCESS;
\r
218 case ARCEXTRACT_INPROCESS:
\r
219 //
\93\96\8aY
\83t
\83@
\83C
\83\8b\82Ì
\8f\88\97\9d\82ð
\8eÀ
\8ds
\92\86\81B
\r
220 piInfo.uStatus = TPI_STATUS_INPROCESS;
\r
223 //
\93\96\8aY
\83t
\83@
\83C
\83\8b\82Ì
\8f\88\97\9d\82ð
\8fI
\97¹
\81B
\r
224 piInfo.uStatus = TPI_STATUS_ENDPROCESS;
\r
227 //
\93\96\8aY
\8f\91\8cÉ
\82Ì
\8c\9f\8d¸
\92\86\81B
\r
228 piInfo.uStatus = TPI_STATUS_TESTARCHIVE;
\r
230 case ARCEXTRACT_COPY:
\r
231 //
\93\96\8aY
\8f\91\8cÉ
\82Ì
\8f\91\82«
\96ß
\82µ
\92\86\81B
\r
232 piInfo.uStatus = TPI_STATUS_COPYARCHIVE;
\r
234 case ARCEXTRACT_END:
\r
235 //
\93\96\8aY
\8f\91\8cÉ
\82Ì
\8f\88\97\9d\82ð
\8fI
\97¹
\81B
\r
236 piInfo.uStatus = TPI_STATUS_CLOSEARCHIVE;
\r
240 //
\83R
\81[
\83\8b\83o
\83b
\83N
\8aÖ
\90\94\82É
\91\97\90M
\81B
\r
241 if (g_prProc == NULL)
\r
246 return g_prProc(TPI_NOTIFY_COMMON, & piInfo) != TPI_CALLBACK_CANCEL;
\r
249 //******************************************************************************
\r
250 // Inside Functions
\r
251 //******************************************************************************
\r
253 int CalErrorCodeConvert(int nCalErrorCode)
\r
255 switch (nCalErrorCode)
\r
257 case 0: return TPI_ERROR_SUCCESS;
\r
258 case ERROR_DISK_SPACE: return TPI_ERROR_IO_ARC_WRITE;
\r
259 case ERROR_READ_ONLY: return TPI_ERROR_IO_FILE_WRITE;
\r
260 case ERROR_USER_SKIP: return TPI_ERROR_D_SKIPPED;
\r
261 case ERROR_UNKNOWN_TYPE: return TPI_ERROR_IO_MISC;
\r
262 case ERROR_METHOD: return TPI_ERROR_ARC_UNSUPPORTED;
\r
263 case ERROR_PASSWORD_FILE: return TPI_ERROR_ARC_ENCRYPTED;
\r
264 case ERROR_VERSION: return TPI_ERROR_ARC_UNSUPPORTED;
\r
265 case ERROR_FILE_CRC: return TPI_ERROR_ARC_BROKEN_SUM;
\r
266 case ERROR_FILE_OPEN: return TPI_ERROR_IO_FILE_OPEN;
\r
267 case ERROR_MORE_FRESH: return TPI_ERROR_IO_FILE_MISC;
\r
268 case ERROR_NOT_EXIST: return TPI_ERROR_IO_FILE_ACCESS;
\r
269 case ERROR_ALREADY_EXIST: return TPI_ERROR_IO_FILE_ACCESS;
\r
270 case ERROR_TOO_MANY_FILES: return TPI_ERROR_IO_ARC_MISC;
\r
271 case ERROR_MAKEDIRECTORY: return TPI_ERROR_IO_DIR_OPEN;
\r
272 case ERROR_CANNOT_WRITE: return TPI_ERROR_IO_FILE_WRITE;
\r
273 case ERROR_HUFFMAN_CODE: return TPI_ERROR_ARC_BROKEN_MISC;
\r
274 case ERROR_COMMENT_HEADER: return TPI_ERROR_ARC_BROKEN_HEADER;
\r
275 case ERROR_HEADER_CRC: return TPI_ERROR_ARC_BROKEN_SUM;
\r
276 case ERROR_HEADER_BROKEN: return TPI_ERROR_ARC_BROKEN_HEADER;
\r
277 case ERROR_ARC_FILE_OPEN: return TPI_ERROR_IO_ARC_OPEN;
\r
278 case ERROR_NOT_ARC_FILE: return TPI_ERROR_D_UNSUPPORTED;
\r
279 case ERROR_CANNOT_READ: return TPI_ERROR_IO_ARC_READ;
\r
280 case ERROR_FILE_STYLE: return TPI_ERROR_D_UNSUPPORTED;
\r
281 case ERROR_COMMAND_NAME: return TPI_ERROR_UNDEFINED;
\r
282 case ERROR_MORE_HEAP_MEMORY:return TPI_ERROR_D_OUTOFMEMORY;
\r
283 case ERROR_ENOUGH_MEMORY: return TPI_ERROR_D_OUTOFMEMORY;
\r
284 case ERROR_ALREADY_RUNNING: return TPI_ERROR_UNDEFINED;
\r
285 case ERROR_USER_CANCEL: return TPI_ERROR_D_SKIPPED;
\r
286 case ERROR_HARC_ISNOT_OPENED: return TPI_ERROR_D_PARAMETER;
\r
287 case ERROR_NOT_SEARCH_MODE: return TPI_ERROR_D_PARAMETER;
\r
288 case ERROR_NOT_SUPPORT: return TPI_ERROR_U_USE_LIBRARY;
\r
289 case ERROR_TIME_STAMP: return TPI_ERROR_UNDEFINED;
\r
290 case ERROR_TMP_OPEN: return TPI_ERROR_IO_TMP_OPEN;
\r
291 case ERROR_LONG_FILE_NAME: return TPI_ERROR_IO_FILE_ACCESS;
\r
292 case ERROR_ARC_READ_ONLY: return TPI_ERROR_IO_ARC_ACCESS;
\r
293 case ERROR_SAME_NAME_FILE: return TPI_ERROR_UNDEFINED;
\r
294 case ERROR_NOT_FIND_ARC_FILE: return TPI_ERROR_IO_ARC_NOTFOUND;
\r
295 case ERROR_RESPONSE_READ: return TPI_ERROR_IO_MISC_READ;
\r
296 case ERROR_NOT_FILENAME: return TPI_ERROR_IO_FILE_NOTFOUND;
\r
297 case ERROR_TMP_COPY: return TPI_ERROR_IO_TMP_COPY;
\r
298 case ERROR_EOF: return TPI_ERROR_ARC_BROKEN_SIZE;
\r
299 case ERROR_ADD_TO_LARC: return TPI_ERROR_UNDEFINED;
\r
300 case ERROR_TMP_BACK_SPACE: return TPI_ERROR_IO_TMP_MOVE;
\r
301 case ERROR_SHARING: return TPI_ERROR_IO_FILE_ACCESS;
\r
302 case ERROR_NOT_FIND_FILE: return TPI_ERROR_IO_NOTFOUND;
\r
303 case ERROR_LOG_FILE: return TPI_ERROR_IO_MISC_WRITE;
\r
304 case ERROR_NO_DEVICE: return TPI_ERROR_IO_FILE_ACCESS;
\r
305 case ERROR_GET_ATTRIBUTES: return TPI_ERROR_IO_FILE_GETINFO;
\r
306 case ERROR_SET_ATTRIBUTES: return TPI_ERROR_IO_FILE_SETINFO;
\r
307 case ERROR_GET_INFORMATION: return TPI_ERROR_IO_FILE_GETINFO;
\r
308 case ERROR_GET_POINT: return TPI_ERROR_IO_FILE_POINT;
\r
309 case ERROR_SET_POINT: return TPI_ERROR_IO_FILE_POINT;
\r
310 case ERROR_CONVERT_TIME: return TPI_ERROR_UNDEFINED;
\r
311 case ERROR_GET_TIME: return TPI_ERROR_IO_FILE_GETINFO;
\r
312 case ERROR_SET_TIME: return TPI_ERROR_IO_FILE_SETINFO;
\r
313 case ERROR_CLOSE_FILE: return TPI_ERROR_IO_FILE_CLOSE;
\r
314 case ERROR_HEAP_MEMORY: return TPI_ERROR_D_USEMEMORY;
\r
315 case ERROR_HANDLE: return TPI_ERROR_UNDEFINED;
\r
316 case ERROR_TIME_STAMP_RANGE:return TPI_ERROR_UNDEFINED;
\r
317 case ERROR_MAKE_ARCHIVE: return TPI_ERROR_ARC_BROKEN_MISC;
\r
318 case ERROR_NOT_CONFIRM_NAME:return TPI_ERROR_ARC_BROKEN_HEADER;
\r
319 case ERROR_UNEXPECTED_EOF: return TPI_ERROR_ARC_BROKEN_HEADER;
\r
320 case ERROR_INVALID_END_MARK:return TPI_ERROR_ARC_BROKEN_SIZE;
\r
321 case ERROR_INVOLVED_LZH: return TPI_ERROR_ARC_BROKEN_MISC;
\r
322 case ERROR_NO_END_MARK: return TPI_ERROR_ARC_BROKEN_SIZE;
\r
323 case ERROR_HDR_INVALID_SIZE:return TPI_ERROR_ARC_BROKEN_HEADER;
\r
324 case ERROR_UNKNOWN_LEVEL: return TPI_ERROR_ARC_UNSUPPORTED;
\r
325 case ERROR_BROKEN_DATA: return TPI_ERROR_ARC_BROKEN_MISC;
\r
326 case ERROR_INVALID_PATH: return TPI_ERROR_ARC_DANGER;
\r
327 case ERROR_TOO_BIG: return TPI_ERROR_IO_FILE_WRITE;
\r
328 case ERROR_EXECUTABLE_FILE: return TPI_ERROR_ARC_DANGER;
\r
329 case ERROR_INVALID_VALUE: return TPI_ERROR_UNDEFINED;
\r
330 case ERROR_HDR_EXPLOIT: return TPI_ERROR_ARC_DANGER;
\r
331 case ERROR_HDR_NO_CRC: return TPI_ERROR_ARC_BROKEN_HEADER;
\r
332 case ERROR_HDR_NO_NAME: return TPI_ERROR_ARC_BROKEN_HEADER;
\r
333 default: return TPI_ERROR_UNDEFINED;
\r
337 #define GetAPIAddress(name, unicode) GetProcAddress(g_LibInfo.hLib, (g_LibInfo.szPrefix + wxT(name) + ((unicode && g_LibInfo.fUnicode) ? wxT("W") : wxEmptyString)).char_str())
\r
338 #define GetAPIAddressAlt(name, unicode) GetProcAddress(g_LibInfoAlt.hLib, (g_LibInfoAlt.szPrefix + wxT(name) + ((unicode && g_LibInfoAlt.fUnicode) ? wxT("W") : wxEmptyString)).char_str())
\r
340 //******************************************************************************
\r
342 //******************************************************************************
\r
349 int __stdcall GetPluginInformation
\r
351 unsigned int _uInfoId,
\r
358 return TPI_ERROR_D_PARAMETER;
\r
360 switch (LOWORD(_uInfoId))
\r
362 case TPI_INFO_VERSION_MAJOR:
\r
363 case TPI_INFO_VERSION_MINOR:
\r
364 * (int *) _pPtr = 0;
\r
366 case TPI_INFO_VERSION_API:
\r
367 * (int *) _pPtr = 2;
\r
370 return TPI_ERROR_D_UNSUPPORTED;
\r
372 return TPI_ERROR_SUCCESS;
\r
375 int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)
\r
377 static unsigned int s_uFileID;
\r
379 wxXmlDocument config(wxPathOnly(p.GetExecutablePath()) + wxT("/lib/calLibrary.xml"));
\r
380 //
\88ê
\8bC
\82É
\90æ
\93ª
\82Ì
\83\89\83C
\83u
\83\89\83\8a\82Ì
\8fî
\95ñ
\82ð
\8eæ
\93¾
\81B
\r
381 wxXmlNode * xmlLibrary = config.GetRoot()->GetChildren();
\r
385 // xml
\89ð
\90Í
\8aJ
\8en
\81B
\r
390 for (unsigned int i = 0; i < s_uFileID && xmlLibrary != NULL; i++)
\r
392 xmlLibrary = xmlLibrary->GetNext();
\r
396 if (xmlLibrary == NULL || xmlLibrary->GetName() != wxT("library"))
\r
398 // xml
\95¶
\96@
\83G
\83\89\81[
\81B
\r
399 return TPI_ERROR_UNDEFINED;
\r
402 MakeFormatInfo(wxT("calLibrary"), _fiInfo, xmlLibrary, s_uFileID++);
\r
404 return TPI_ERROR_SUCCESS;
\r
407 int __stdcall LoadPlugin
\r
409 const wxString & _szArcName,
\r
410 wxULongLong _llSubOption
\r
413 // xml
\89ð
\90Í
\8aJ
\8en
\81B
\r
415 wxXmlDocument config(wxPathOnly(p.GetExecutablePath()) + wxT("/lib/calLibrary.xml"));
\r
416 if (! config.IsOk())
\r
418 return TPI_ERROR_UNDEFINED;
\r
420 //
\88ê
\8bC
\82É
\90æ
\93ª
\82Ì
\83\89\83C
\83u
\83\89\83\8a\82Ì
\8fî
\95ñ
\82ð
\8eæ
\93¾
\81B
\r
421 wxXmlNode * xmlLibrary = config.GetRoot()->GetChildren();
\r
423 //
\91Î
\8fÛ
\82ª
\91¶
\8dÝ
\82·
\82é
\82È
\82ç
\82Î
\91Î
\89\9e\82·
\82é
\83\89\83C
\83u
\83\89\83\8a\82ð
\92²
\8d¸
\81A
\r
424 //
\91Î
\8fÛ
\82ª
\91¶
\8dÝ
\82µ
\82È
\82¢
\82È
\82ç
\82Î
\8ew
\8e¦
\82³
\82ê
\82½
\83\89\83C
\83u
\83\89\83\8a\82ð
\83\8d\81[
\83h
\81B
\r
425 if (! ::wxFileExists(_szArcName))
\r
427 //
\93K
\93\96\82È
\88Ê
\92u
\82Ü
\82Å
\88Ú
\93®
\81B
\r
428 for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < _llSubOption && xmlLibrary != NULL; g_LibInfo.nLibIndex++)
\r
430 xmlLibrary = xmlLibrary->GetNext();
\r
432 if (xmlLibrary == NULL || xmlLibrary->GetName() != wxT("library"))
\r
434 // xml
\95¶
\96@
\83G
\83\89\81[
\81B
\r
435 return TPI_ERROR_UNDEFINED;
\r
437 g_LibInfo.node = * xmlLibrary;
\r
439 //
\83\89\83C
\83u
\83\89\83\8a\82ð
\83\8d\81[
\83h
\81B
\r
440 g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name"), wxEmptyString).c_str());
\r
441 if (g_LibInfo.hLib == NULL)
\r
443 return TPI_ERROR_U_LOAD_LIBRARY;
\r
445 g_LibInfo.szPrefix = xmlLibrary->GetPropVal(wxT("prefix"), wxEmptyString);
\r
446 g_LibInfo.fUnicode = xmlLibrary->GetPropVal(wxT("unicode"), wxT("0")) == wxT("1");
\r
448 //
\91ã
\91Ö
\83\89\83C
\83u
\83\89\83\8a\82à
\83\8d\81[
\83h
\81B
\83\8d\81[
\83h
\82Å
\82«
\82È
\82
\82Ä
\82à
\83G
\83\89\81[
\82É
\82Í
\82µ
\82È
\82¢
\81B
\r
449 g_LibInfoAlt.szPrefix = xmlLibrary->GetPropVal(wxT("prefix-alt"), wxEmptyString);
\r
450 g_LibInfoAlt.fUnicode = xmlLibrary->GetPropVal(wxT("unicode-alt"), wxT("0")) == wxT("1");
\r
451 g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name-alt"), wxEmptyString).c_str());
\r
453 return TPI_ERROR_SUCCESS;
\r
456 //
\96³
\8cÀ
\83\8b\81[
\83v
\82É
\8a×
\82ç
\82È
\82¢
\82æ
\82¤
\8fã
\8cÀ
\82ð
\90Ý
\92è
\81B
\r
457 for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)
\r
459 //
\83\89\83C
\83u
\83\89\83\8a\82ð
\83\8d\81[
\83h
\81B
\r
460 g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name"), wxEmptyString).c_str());
\r
461 if (g_LibInfo.hLib == NULL)
\r
463 xmlLibrary = xmlLibrary->GetNext();
\r
466 g_LibInfo.szPrefix = xmlLibrary->GetPropVal(wxT("prefix"), wxEmptyString);
\r
467 g_LibInfo.fUnicode = xmlLibrary->GetPropVal(wxT("unicode"), wxT("0")) == wxT("1");
\r
469 //
\91ã
\91Ö
\83\89\83C
\83u
\83\89\83\8a\82à
\83\8d\81[
\83h
\81B
\83\8d\81[
\83h
\82Å
\82«
\82È
\82
\82Ä
\82à
\83G
\83\89\81[
\82É
\82Í
\82µ
\82È
\82¢
\81B
\r
470 g_LibInfoAlt.szPrefix = xmlLibrary->GetPropVal(wxT("prefix-alt"), wxEmptyString);
\r
471 g_LibInfoAlt.fUnicode = xmlLibrary->GetPropVal(wxT("unicode-alt"), wxT("0")) == wxT("1");
\r
472 g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name-alt"), wxEmptyString).c_str());
\r
473 g_LibInfo.node = * xmlLibrary;
\r
475 //
\8f\91\8cÉ
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82é
\82©
\83`
\83F
\83b
\83N
\81B
\r
476 if (CheckArchive(_szArcName, NULL) == TPI_ERROR_SUCCESS)
\r
478 //
\91Î
\89\9e\82µ
\82Ä
\82¢
\82ê
\82Î
\8f\88\97\9d\82ð
\8fI
\97¹
\81B
\r
479 return TPI_ERROR_SUCCESS;
\r
482 ::FreeLibrary(g_LibInfo.hLib);
\r
483 xmlLibrary = xmlLibrary->GetNext();
\r
486 return TPI_ERROR_U_LOAD_LIBRARY;
\r
489 int __stdcall FreePlugin
\r
491 void * // _pReserved
\r
494 ::FreeLibrary(g_LibInfo.hLib);
\r
495 ::FreeLibrary(g_LibInfoAlt.hLib);
\r
496 return TPI_ERROR_SUCCESS;
\r
499 int __stdcall CheckArchive
\r
501 const wxString & _szArcName,
\r
505 // Unicode
\83\82\81[
\83h
\82É
\90Ý
\92è
\81B
\r
506 FARPROC fpProc = ::GetAPIAddress("SetUnicodeMode", false);
\r
507 g_fExistUnicodeMode = fpProc != NULL;
\r
508 if (g_fExistUnicodeMode)
\r
510 ((BOOL (__stdcall *)(BOOL)) fpProc)(TRUE);
\r
513 fpProc = ::GetAPIAddress("CheckArchive", true);
\r
514 if (fpProc == NULL)
\r
516 return TPI_ERROR_U_USE_LIBRARY;
\r
519 if (! (g_LibInfo.fUnicode
\r
520 ? ((BOOL (__stdcall *)(const wchar_t *, const int)) fpProc)(_szArcName.wchar_str(), 0)
\r
521 : ((BOOL (__stdcall *)(const char *, const int)) fpProc)(g_fExistUnicodeMode ? _szArcName.ToUTF8() : _szArcName.char_str(), 0)
\r
524 return TPI_ERROR_D_UNSUPPORTED;
\r
527 if (_nFileCount != NULL)
\r
529 fpProc = ::GetAPIAddress("GetFileCount", true);
\r
530 if (fpProc == NULL)
\r
532 return TPI_ERROR_U_USE_LIBRARY;
\r
535 * _nFileCount = g_LibInfo.fUnicode
\r
536 ? ((int (__stdcall *)(const wchar_t *)) fpProc)(_szArcName.wchar_str())
\r
537 : ((int (__stdcall *)(const char *)) fpProc)(g_fExistUnicodeMode ? _szArcName.ToUTF8() : _szArcName.char_str());
\r
538 if (* _nFileCount == -1)
\r
540 return TPI_ERROR_ARC_UNSUPPORTED;
\r
544 return TPI_ERROR_SUCCESS;
\r
547 int __stdcall OpenArchive
\r
549 const wxString & _szArcName,
\r
553 FARPROC fpProc = ::GetAPIAddress("OpenArchive", true);
\r
554 if (fpProc == NULL)
\r
556 return TPI_ERROR_U_USE_LIBRARY;
\r
559 * _hArchive = g_LibInfo.fUnicode
\r
560 ? ((void * (__stdcall *)(const HWND, const wchar_t *, const DWORD)) fpProc)(NULL, _szArcName.wchar_str(), 0)
\r
561 : ((void * (__stdcall *)(const HWND, const char *, const DWORD)) fpProc)(NULL, g_fExistUnicodeMode ? _szArcName.ToUTF8() : _szArcName.char_str(), 0);
\r
562 return _hArchive == NULL ? TPI_ERROR_UNDEFINED : TPI_ERROR_SUCCESS;
\r
565 int __stdcall CloseArchive
\r
570 FARPROC fpProc = ::GetAPIAddress("CloseArchive", false);
\r
571 return fpProc == NULL ? TPI_ERROR_U_USE_LIBRARY : CalErrorCodeConvert(((int (__stdcall *)(void *)) fpProc)(_hArchive));
\r
574 int __stdcall GetFileInformation
\r
577 TPI_FILEINFO * _fiInfo,
\r
581 static unsigned int s_uFileID;
\r
582 static FARPROC fpNext, fpAttr;
\r
584 INDIVIDUALINFO iiInfo;
\r
585 INDIVIDUALINFOW iiInfoW;
\r
586 memset(& iiInfo, 0, sizeof(iiInfo));
\r
587 memset(& iiInfoW, 0, sizeof(iiInfoW));
\r
592 FARPROC fpProc = ::GetAPIAddress("FindFirst", true);
\r
593 fpNext = ::GetAPIAddress("FindNext", true);
\r
594 fpAttr = ::GetAPIAddress("GetAttribute", false);
\r
595 if (fpProc == NULL)
\r
597 return TPI_ERROR_U_USE_LIBRARY;
\r
600 nResult = g_LibInfo.fUnicode
\r
601 ? ((int (__stdcall *)(void *, const wchar_t *, LPINDIVIDUALINFOW)) fpProc)(_hArchive, L"*", & iiInfoW)
\r
602 : ((int (__stdcall *)(void *, const char *, LPINDIVIDUALINFO)) fpProc)(_hArchive, "*", & iiInfo);
\r
606 if (fpNext == NULL)
\r
608 return TPI_ERROR_U_USE_LIBRARY;
\r
611 nResult = g_LibInfo.fUnicode
\r
612 ? ((int (__stdcall *)(void *, LPINDIVIDUALINFOW)) fpNext)(_hArchive, & iiInfoW)
\r
613 : ((int (__stdcall *)(void *, LPINDIVIDUALINFO)) fpNext)(_hArchive, & iiInfo);
\r
616 nResult = CalErrorCodeConvert(nResult);
\r
617 if (nResult == TPI_ERROR_SUCCESS)
\r
619 _fiInfo->dwAttribute = (fpAttr == NULL) ? 0 : ((int (__stdcall *)(void *)) fpAttr)(_hArchive);
\r
620 if ((signed) _fiInfo->dwAttribute == -1)
\r
622 _fiInfo->dwAttribute = 0;
\r
625 if (g_LibInfo.fUnicode)
\r
627 _fiInfo->dwCRC32 = iiInfoW.dwCRC;
\r
628 _fiInfo->uOSType = iiInfoW.uOSType;
\r
629 _fiInfo->llPackedSize = iiInfoW.dwCompressedSize;
\r
630 _fiInfo->llUnpackedSize = iiInfoW.dwOriginalSize;
\r
631 _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfoW.wTime, iiInfoW.wDate));
\r
632 _fiInfo->szStoredName = WC2String(iiInfoW.szFileName);
\r
633 _fiInfo->szMethod = WC2String(iiInfoW.szMode);
\r
634 _fiInfo->wCompressRatio = iiInfoW.wRatio;
\r
638 _fiInfo->dwCRC32 = iiInfo.dwCRC;
\r
639 _fiInfo->uOSType = iiInfo.uOSType;
\r
640 _fiInfo->llPackedSize = iiInfo.dwCompressedSize;
\r
641 _fiInfo->llUnpackedSize = iiInfo.dwOriginalSize;
\r
642 _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfo.wTime, iiInfo.wDate));
\r
643 _fiInfo->szStoredName = MB2String(iiInfo.szFileName);
\r
644 _fiInfo->szMethod = MB2String(iiInfo.szMode);
\r
645 _fiInfo->wCompressRatio = iiInfo.wRatio;
\r
647 _fiInfo->llFileID = s_uFileID++;
\r
648 _fiInfo->fnFileName = wxFileName::FileName(_fiInfo->szStoredName);
\r
649 // _fiInfo->ftAccessTime = 0;
\r
650 // _fiInfo->ftCreateTime = 0;
\r
656 int __stdcall GetArchiveInformation
\r
659 TPI_ARCHIVEINFO * _aiInfo
\r
662 FARPROC fpProc = ::GetAPIAddress("GetArcFileName", true);
\r
663 if (fpProc != NULL)
\r
665 // TODO :
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\95¶
\8e\9a\90\94\90§
\8cÀ
\82ð
\93P
\94p
\81B
\r
667 if (g_LibInfo.fUnicode)
\r
670 ((int (__stdcall *)(void *, wchar_t *, const int)) fpProc)(_hArchive, sz, 2048);
\r
676 ((int (__stdcall *)(void *, char *, const int)) fpProc)(_hArchive, sz, 2048);
\r
679 _aiInfo->fnArchive = wxFileName::FileName(s);
\r
682 fpProc = ::GetAPIAddress("GetArcFileSizeEx", false);
\r
683 if (fpProc != NULL)
\r
685 ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llFileSize);
\r
689 fpProc = ::GetAPIAddress("GetArcFileSize", false);
\r
690 if (fpProc != NULL)
\r
692 _aiInfo->llFileSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);
\r
696 fpProc = ::GetAPIAddress("GetArcOriginalSizeEx", false);
\r
697 if (fpProc != NULL)
\r
699 ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llUnpackedSize);
\r
703 fpProc = ::GetAPIAddress("GetArcOriginalSize", false);
\r
704 if (fpProc != NULL)
\r
706 _aiInfo->llUnpackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);
\r
710 fpProc = ::GetAPIAddress("GetArcCompressedSizeEx", false);
\r
711 if (fpProc != NULL)
\r
713 ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llPackedSize);
\r
717 fpProc = ::GetAPIAddress("GetArcCompressedSize", false);
\r
718 if (fpProc != NULL)
\r
720 _aiInfo->llPackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);
\r
724 fpProc = ::GetAPIAddress("GetArcReadSizeEx", false);
\r
725 if (fpProc != NULL)
\r
727 ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llReadSize);
\r
731 fpProc = ::GetAPIAddress("GetArcReadSize", false);
\r
732 if (fpProc != NULL)
\r
734 _aiInfo->llReadSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);
\r
738 fpProc = ::GetAPIAddress("GetArcRatio", false);
\r
739 if (fpProc != NULL)
\r
741 _aiInfo->wCompressRatio = ((WORD (__stdcall *)(void *)) fpProc)(_hArchive);
\r
745 fpProc = ::GetAPIAddress("GetArcAccessTimeEx", false);
\r
746 if (fpProc != NULL)
\r
748 ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);
\r
749 _aiInfo->tmAccess = FileTimeToWxDateTime(& ft);
\r
752 fpProc = ::GetAPIAddress("GetArcCreatedTimeEx", false);
\r
753 if (fpProc != NULL)
\r
755 ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);
\r
756 _aiInfo->tmCreate = FileTimeToWxDateTime(& ft);
\r
759 fpProc = ::GetAPIAddress("GetArcWriteTimeEx", false);
\r
760 if (fpProc != NULL)
\r
762 ((BOOL (__stdcall *)(void *, FILETIME *)) fpProc)(_hArchive, & ft);
\r
763 _aiInfo->tmModified = FileTimeToWxDateTime(& ft);
\r
766 fpProc = ::GetAPIAddress("GetArcOSType", false);
\r
767 if (fpProc != NULL)
\r
769 _aiInfo->uOSType = ((UINT (__stdcall *)(void *)) fpProc)(_hArchive);
\r
772 fpProc = ::GetAPIAddress("IsSFXFile", false);
\r
773 if (fpProc != NULL)
\r
775 _aiInfo->nSFXType = ((int (__stdcall *)(void *)) fpProc)(_hArchive);
\r
777 if (fpProc == NULL || _aiInfo->nSFXType < 0)
\r
779 //
\83G
\83\89\81[
\82Ì
\8fê
\8d\87\82Í
\82Æ
\82è
\82 \82¦
\82¸
\92Ê
\8fí
\82Ì
\8f\91\8cÉ
\82Æ
\82Ý
\82È
\82·
\81B
\r
780 _aiInfo->nSFXType = 0;
\r
783 //
\8c`
\8e®
\82É
\8aÖ
\82·
\82é
\8fî
\95ñ
\82ð
\8eæ
\93¾
\81B
\r
784 MakeFormatInfo(wxT("calLibrary"), & _aiInfo->fiInfo, & g_LibInfo.node, 0);
\r
786 return TPI_ERROR_SUCCESS;
\r
789 int __stdcall Command
\r
791 unsigned int _uCommand,
\r
792 TPI_SWITCHES * _swInfo,
\r
793 const wxString & _szArcName,
\r
794 const wxArrayString & _szFiles
\r
797 // Ini
\82©
\82ç
\83R
\83}
\83\93\83h
\83\89\83C
\83\93\82ð
\8eæ
\93¾
\81B
\r
798 wxString szPath, szCommandLine;
\r
800 // API
\83A
\83h
\83\8c\83X
\8eæ
\93¾
\81B
\r
801 g_LibInfoAlt.fRunning
\r
802 = g_LibInfo.node.GetPropVal(
\r
803 _uCommand == TPI_COMMAND_ADD ? wxT("add-alt") :
\r
804 _uCommand == TPI_COMMAND_EXTRACT ? wxT("extract-alt") :
\r
805 _uCommand == TPI_COMMAND_DELETE ? wxT("delete-alt") :
\r
806 _uCommand == TPI_COMMAND_UPDATE ? wxT("update-alt") :
\r
807 _uCommand == TPI_COMMAND_TEST ? wxT("test-alt") :
\r
808 _uCommand == TPI_COMMAND_REPAIR ? wxT("repair-alt") :
\r
809 _uCommand == TPI_COMMAND_MOVE ? wxT("move-alt") :
\r
810 _uCommand == TPI_COMMAND_SFX ? wxT("sfx-alt") :
\r
811 _uCommand == TPI_COMMAND_UNSFX ? wxT("unsfx-alt") : wxEmptyString, & szCommandLine);
\r
813 = g_LibInfo.node.GetPropVal(
\r
814 _uCommand == TPI_COMMAND_ADD ? wxT("add") :
\r
815 _uCommand == TPI_COMMAND_EXTRACT ? wxT("extract") :
\r
816 _uCommand == TPI_COMMAND_DELETE ? wxT("delete") :
\r
817 _uCommand == TPI_COMMAND_UPDATE ? wxT("update") :
\r
818 _uCommand == TPI_COMMAND_TEST ? wxT("test") :
\r
819 _uCommand == TPI_COMMAND_REPAIR ? wxT("repair") :
\r
820 _uCommand == TPI_COMMAND_MOVE ? wxT("move") :
\r
821 _uCommand == TPI_COMMAND_SFX ? wxT("sfx") :
\r
822 _uCommand == TPI_COMMAND_UNSFX ? wxT("unsfx") : wxEmptyString, & szCommandLine);
\r
825 g_LibInfo.fRunning ? ::GetAPIAddress( "", true) :
\r
826 g_LibInfoAlt.fRunning ? ::GetAPIAddressAlt("", true) : NULL;
\r
827 if (fpProc == NULL || szCommandLine.IsEmpty())
\r
829 return TPI_ERROR_U_USE_LIBRARY;
\r
832 //
\83R
\83}
\83\93\83h
\83\89\83C
\83\93\81E
\83\8c\83X
\83|
\83\93\83X
\83t
\83@
\83C
\83\8b\8dì
\90¬
\81B
\r
834 szResponceFileName = MakeResponceFile(_szFiles, g_LibInfo.node.GetPropVal(wxT("quote-resp"), wxT("1")) == wxT("1")),
\r
835 szCommandLineSend = MakeCommandLineSend(szCommandLine, _szArcName, _swInfo, _szFiles, szResponceFileName);
\r
837 //
\83R
\83}
\83\93\83h
\83\89\83C
\83\93\8eÀ
\8ds
\81B
\r
840 if ((g_LibInfo.fRunning && g_LibInfo.fUnicode) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fUnicode))
\r
842 wchar_t szTmpOut[2049];
\r
843 nErrorCode = ((int (__stdcall *)(const HWND, const wchar_t *, wchar_t *, DWORD)) fpProc)(NULL, szCommandLineSend.wchar_str(), szTmpOut, 2048);
\r
844 szOutput = WC2String(szTmpOut);
\r
848 char szTmpOut[2049];
\r
849 nErrorCode = ((int (__stdcall *)(const HWND, const char *, char *, DWORD)) fpProc)(NULL, g_fExistUnicodeMode ? szCommandLineSend.ToUTF8() : szCommandLineSend.char_str(), szTmpOut, 2048);
\r
850 szOutput = MB2String(szTmpOut);
\r
853 //
\83\8c\83X
\83|
\83\93\83X
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\81B
\r
854 ::wxRemoveFile(szResponceFileName);
\r
856 if (nErrorCode != 0)
\r
859 ::wxMessageBox(wxString::Format(wxT("Error :\n%x\n\nCommandLine:\n%s\n\nOutput:\n%s"), nErrorCode, szCommandLineSend.c_str(), szOutput.c_str()));
\r
861 MessageBox(NULL, wxString::Format(wxT("Error :\n%x\n\nCommandLine:\n%s\n\nOutput:\n%s"), nErrorCode, szCommandLineSend.c_str(), szOutput.c_str()), NULL, 0);
\r
864 return CalErrorCodeConvert(nErrorCode);
\r
867 int __stdcall SetCallbackProc
\r
869 TPI_PROC _prArcProc
\r
872 //
\83|
\83C
\83\93\83^
\82ð
\95Û
\91¶
\81B
\r
873 if (_prArcProc == NULL)
\r
875 return TPI_ERROR_D_PARAMETER;
\r
877 g_prProc = * _prArcProc;
\r
878 g_LibInfo.fCallback32bit = FALSE;
\r
879 g_LibInfoAlt.fCallback32bit = FALSE;
\r
881 // API
\82Ì
\83A
\83h
\83\8c\83X
\82ð
\8eæ
\93¾
\81B
\r
882 FARPROC fpProc = ::GetAPIAddress("SetOwnerWindowEx64", true);
\r
884 BOOL fResult = FALSE;
\r
885 if (fpProc == NULL)
\r
887 // SetOwnerWindowEx64
\82ª
\8eÀ
\91\95\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\8fê
\8d\87\81ASetOwnerWindowEx
\82ð
\97\98\97p
\81B
\r
888 fpProc = ::GetAPIAddress("SetOwnerWindowEx", true);
\r
889 if (fpProc == NULL)
\r
891 return TPI_ERROR_U_USE_LIBRARY;
\r
893 g_LibInfo.fCallback32bit = TRUE;
\r
894 fResult = ((BOOL (__stdcall *)(HWND, ARCHIVERPROC *)) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc);
\r
898 fResult = ((BOOL (__stdcall *)(HWND, ARCHIVERPROC *, DWORD)) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc, g_LibInfo.fUnicode ? sizeof(EXTRACTINGINFOEX64W) : sizeof(EXTRACTINGINFOEX64));
\r
901 //
\91ã
\91Ö
\83\89\83C
\83u
\83\89\83\8a\82ÌAPI
\82Ì
\83A
\83h
\83\8c\83X
\82ð
\8eæ
\93¾
\81B
\91¶
\8dÝ
\82µ
\82È
\82
\82Ä
\82à
\83G
\83\89\81[
\82É
\82Í
\82µ
\82È
\82¢
\81B
\r
902 fpProc = ::GetAPIAddressAlt("SetOwnerWindowEx64", true);
\r
904 if (fpProc == NULL)
\r
906 // SetOwnerWindowEx64
\82ª
\8eÀ
\91\95\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\8fê
\8d\87\81ASetOwnerWindowEx
\82ð
\97\98\97p
\81B
\r
907 fpProc = ::GetAPIAddressAlt("SetOwnerWindowEx", true);
\r
908 if (fpProc == NULL)
\r
912 g_LibInfoAlt.fCallback32bit = TRUE;
\r
913 ((BOOL (__stdcall *)(HWND, ARCHIVERPROC *)) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc);
\r
917 ((BOOL (__stdcall *)(HWND, ARCHIVERPROC *, DWORD)) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc, g_LibInfoAlt.fUnicode ? sizeof(EXTRACTINGINFOEX64W) : sizeof(EXTRACTINGINFOEX64));
\r
920 return fResult ? TPI_ERROR_SUCCESS : TPI_ERROR_UNDEFINED;
\r