MY_UNKNOWN_IMP1(ICryptoGetTextPassword)\r
INTERFACE_IArchiveExtractCallback(;)\r
STDMETHOD(CryptoGetTextPassword)(BSTR * szPassword);\r
+ CArchiveExtractCallback(CMyComPtr<IInArchive>, TPI_SWITCHES *);\r
\r
int nErrorCode;\r
- CMyComPtr<IInArchive> hArc;\r
TPI_SWITCHES * swInfo;\r
\r
private:\r
wxULongLong_t nCurrentPos;\r
COutFileStream * _outFileStreamSpec;\r
CMyComPtr<ISequentialOutStream> _outFileStream;\r
+ CMyComPtr<IInArchive> hArc;\r
};\r
\r
+CArchiveExtractCallback::CArchiveExtractCallback(CMyComPtr<IInArchive> hArc, TPI_SWITCHES * swInfo)\r
+{\r
+ this->hArc = hArc;\r
+ this->swInfo = swInfo;\r
+ this->fTriedPassword = false;\r
+}\r
+\r
STDMETHODIMP CArchiveExtractCallback::SetTotal(wxULongLong_t)\r
{\r
return S_OK;\r
{\r
this->piInfo.eMessage = TPI_MESSAGE_ASK;\r
this->piInfo.eStatus = TPI_PARAM_PASSWORD;\r
+ // 次のファイル名が取得できないので、とりあえず空にしておく。\r
+ this->piInfo.fiInfo.fnFileName.Clear();\r
return (g_prProc != NULL && g_prProc(TPI_NOTIFY_COMMON, & this->piInfo) == TPI_CALLBACK_CONTINUE) ? ::StringToBstr(this->piInfo.szParam.c_str(), szPassword) : E_ABORT;\r
}\r
else\r
MY_UNKNOWN_IMP2(IArchiveUpdateCallback2, ICryptoGetTextPassword2)\r
INTERFACE_IArchiveUpdateCallback2(;)\r
STDMETHOD(CryptoGetTextPassword2)(int * nPasswordIsDefined, BSTR * szPassword);\r
- CArchiveUpdateCallback(): fiItems(0) {};\r
+ CArchiveUpdateCallback(TPI_SWITCHES *, CObjectVector<NWindows::NFile::NFind::CFileInfoW> *);\r
\r
const CObjectVector<NWindows::NFile::NFind::CFileInfoW> * fiItems;\r
int nErrorCode;\r
- TPI_SWITCHES * swInfo;\r
\r
private:\r
wxULongLong_t nCurrentPos;\r
TPI_PROCESSINFO piInfo;\r
+ TPI_SWITCHES * swInfo;\r
};\r
\r
+CArchiveUpdateCallback::CArchiveUpdateCallback(TPI_SWITCHES * swInfo, CObjectVector<NWindows::NFile::NFind::CFileInfoW> * fiItems)\r
+{\r
+ this->swInfo = swInfo;\r
+ this->fiItems = fiItems;\r
+}\r
+\r
STDMETHODIMP CArchiveUpdateCallback::SetTotal(wxULongLong_t)\r
{\r
return S_OK;\r
while (GetFileInformation(hArc, & fiInfo, false) == TPI_ERROR_SUCCESS);\r
}\r
\r
- CArchiveExtractCallback * extractCallbackSpec = new CArchiveExtractCallback;\r
+ CArchiveExtractCallback * extractCallbackSpec = new CArchiveExtractCallback(hArc,_swInfo);\r
CMyComPtr<IArchiveExtractCallback> extractCallback(extractCallbackSpec);\r
- extractCallbackSpec->hArc = hArc;\r
- extractCallbackSpec->swInfo = _swInfo;\r
hArc->Extract(& nIndexes.Front(), nIndexes.Size(), _eCommand == TPI_COMMAND_TEST, extractCallback);\r
nErrorCode = extractCallbackSpec->nErrorCode;\r
CloseArchive(hArc);\r
}\r
\r
// 更新処理を実行。\r
- CArchiveUpdateCallback * updateCallbackSpec = new CArchiveUpdateCallback;\r
+ CArchiveUpdateCallback * updateCallbackSpec = new CArchiveUpdateCallback(_swInfo, & fiItems);\r
CMyComPtr<IArchiveUpdateCallback2> updateCallback(updateCallbackSpec);\r
- updateCallbackSpec->fiItems = & fiItems;\r
- updateCallbackSpec->swInfo = _swInfo;\r
hArc->UpdateItems(outFileStream, fiItems.Size(), updateCallback);\r
nErrorCode = updateCallbackSpec->nErrorCode;\r
break;\r