fpProc = ::GetAPIAddress("GetFileCount");\r
if (fpProc == NULL)\r
{\r
+ CloseArchive(* _hArchive);\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
unsigned int n;\r
nErrorCode = ErrorCodeConvert(((UINT (__cdecl *)(void *, size_t *)) fpProc)(* _hArchive, & n));\r
if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
+ CloseArchive(* _hArchive);\r
return nErrorCode;\r
}\r
* _nFileCount = n;\r
FARPROC fpProc = _eCommand == TPI_COMMAND_EXTRACT ? ::GetAPIAddress("Extract") : ::GetAPIAddress("Test");\r
if (fpProc == NULL)\r
{\r
+ CloseArchive(hArc);\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
nErrorCode = ErrorCodeConvert(((UINT (__cdecl *)(void *)) fpProc)(hArc));\r
if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
+ CloseArchive(hArc);\r
return nErrorCode;\r
}\r
\r
g_oaInfo.ArcName = NULL;\r
g_oaInfo.ArcNameW = (wchar_t *) malloc((_szArcName.Len() + 1) * sizeof(wchar_t));\r
wcscpy(g_oaInfo.ArcNameW, _szArcName.wchar_str());\r
- g_oaInfo.OpenMode = RAR_OM_EXTRACT;\r
+ g_oaInfo.OpenMode = RAR_OM_LIST;\r
g_oaInfo.CmtBuf = g_szComment;\r
g_oaInfo.CmtBufSize = sizeof(g_szComment) - 1;\r
* _hArchive = ((void * (__stdcall *)(RAROpenArchiveDataEx *)) p)(& g_oaInfo);\r
// コールバック関数を設定。\r
if (! g_hLib.HasSymbol(wxT("RARSetCallback")))\r
{\r
+ CloseArchive(* _hArchive);\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
p = g_hLib.GetSymbol(wxT("RARSetCallback"));\r
if (! p)\r
{\r
+ CloseArchive(* _hArchive);\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
((void (__stdcall *)(void *, void *, long)) p)(* _hArchive, (void *) CallbackProc, (long) & g_hdInfo);\r
}\r
\r
// 開きなおす。\r
- void * hArc;\r
- int nErrorCode = OpenArchive(_szArcName, & hArc);\r
+ if (! g_hLib.HasSymbol(wxT("RAROpenArchiveEx")))\r
+ {\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ void * p = g_hLib.GetSymbol(wxT("RAROpenArchiveEx"));\r
+ if (! p)\r
+ {\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ RAROpenArchiveDataEx oaInfo;\r
+ memset(& oaInfo, 0, sizeof(oaInfo));\r
+ oaInfo.ArcName = NULL;\r
+ oaInfo.ArcNameW = (wchar_t *) malloc((_szArcName.Len() + 1) * sizeof(wchar_t));\r
+ wcscpy(oaInfo.ArcNameW, _szArcName.wchar_str());\r
+ oaInfo.OpenMode = RAR_OM_EXTRACT;\r
+ oaInfo.CmtBufSize = 0;\r
+ void * hArc = ((void * (__stdcall *)(RAROpenArchiveDataEx *)) p)(& oaInfo);\r
+ free(oaInfo.ArcNameW);\r
+ if (hArc == NULL)\r
+ {\r
+ return TPI_ERROR_UNDEFINED;\r
+ }\r
+ int nErrorCode = ErrorCodeConvert(oaInfo.OpenResult);\r
if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
return nErrorCode;\r
}\r
\r
+ // コールバック関数を設定。\r
+ if (! g_hLib.HasSymbol(wxT("RARSetCallback")))\r
+ {\r
+ CloseArchive(hArc);\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ p = g_hLib.GetSymbol(wxT("RARSetCallback"));\r
+ if (! p)\r
+ {\r
+ CloseArchive(hArc);\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ ((void (__stdcall *)(void *, void *, long)) p)(hArc, (void *) CallbackProc, (long) & g_hdInfo);\r
+\r
void\r
* pS = g_hLib.HasSymbol(wxT("RARSetPassword")) ? g_hLib.GetSymbol(wxT("RARSetPassword")) : NULL,\r
* pR = g_hLib.HasSymbol(wxT("RARReadHeaderEx")) ? g_hLib.GetSymbol(wxT("RARReadHeaderEx")) : NULL,\r
* pP = g_hLib.HasSymbol(wxT("RARProcessFileW")) ? g_hLib.GetSymbol(wxT("RARProcessFileW")) : NULL;\r
if (! pR || ! pP)\r
{\r
+ CloseArchive(hArc);\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
if (pS)\r