OSDN Git Service

UnRAR.dllの仕様変更に対応。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 24 Nov 2010 12:45:18 +0000 (12:45 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Wed, 24 Nov 2010 12:45:18 +0000 (12:45 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@448 9df91469-1e22-0410-86e7-ea8537beb833

src/plugin/rarArc/rarArc.cpp
src/plugin/rarArc/rarArc.h

index 33c5be9..b2c1652 100644 (file)
@@ -229,38 +229,16 @@ int __stdcall OpenArchive
 \r
        memset(& g_oaInfo, 0, sizeof(g_oaInfo));\r
        g_oaInfo.ArcName    = NULL;\r
+//     g_oaInfo.ArcNameW   = _szArcName.wchar_str();\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_LIST;\r
        g_oaInfo.CmtBuf     = g_szComment;\r
        g_oaInfo.CmtBufSize = sizeof(g_szComment) - 1;\r
+       g_oaInfo.Callback   = CallbackProc;\r
        * _hArchive = ((void * (__stdcall *)(RAROpenArchiveDataEx *)) p)(& g_oaInfo);\r
        free(g_oaInfo.ArcNameW);\r
-       if (* _hArchive == NULL)\r
-       {\r
-               return TPI_ERROR_UNDEFINED;\r
-       }\r
-       int nErrorCode = ErrorCodeConvert(g_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(* _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
-       return TPI_ERROR_SUCCESS;\r
+       return * _hArchive == NULL ? TPI_ERROR_UNDEFINED : ErrorCodeConvert(g_oaInfo.OpenResult);\r
 }\r
 \r
 int __stdcall CloseArchive\r
@@ -378,10 +356,12 @@ int __stdcall Command
        RAROpenArchiveDataEx oaInfo;\r
        memset(& oaInfo, 0, sizeof(oaInfo));\r
        oaInfo.ArcName    = NULL;\r
+//     oaInfo.ArcNameW   = _szArcName.wchar_str();\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
+       oaInfo.Callback   = CallbackProc;\r
        void * hArc = ((void * (__stdcall *)(RAROpenArchiveDataEx *)) p)(& oaInfo);\r
        free(oaInfo.ArcNameW);\r
        if (hArc == NULL)\r
@@ -394,20 +374,6 @@ int __stdcall Command
                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
index 57e2854..e0a18d1 100644 (file)
@@ -56,6 +56,8 @@
 //    Structures\r
 //******************************************************************************\r
 \r
+typedef int (__stdcall *UNRARCALLBACK)(unsigned int msg, long UserData, long P1, long P2);\r
+\r
 struct RARHeaderDataEx\r
 {\r
   char         ArcName[1024];\r
@@ -91,7 +93,9 @@ struct RAROpenArchiveDataEx
   unsigned int CmtSize;\r
   unsigned int CmtState;\r
   unsigned int Flags;\r
-  unsigned int Reserved[32];\r
+  UNRARCALLBACK Callback;\r
+  long         UserData;\r
+  unsigned int Reserved[28];\r
 };\r
 \r
 enum UNRARCALLBACK_MESSAGES\r
@@ -100,5 +104,3 @@ enum UNRARCALLBACK_MESSAGES
   UCM_PROCESSDATA,\r
   UCM_NEEDPASSWORD\r
 };\r
-\r
-typedef int (__stdcall *UNRARCALLBACK)(unsigned int msg, long UserData, long P1, long P2);\r