OSDN Git Service

RegisterWindowMessageを呼ぶ回数を初回のみに変更。
[tpi/lychee.git] / src / plugin / calLibrary / calLibrary.cpp
index 930035d..333fbf6 100644 (file)
@@ -52,23 +52,7 @@ struct g_LibInfo
 TPI_PROC g_prProc;\r
 \r
 //******************************************************************************\r
-//    Inside Functions\r
-//******************************************************************************\r
-\r
-wxDateTime FileTimeToWxDateTime(FILETIME * pft)\r
-{\r
-       FILETIME ftLocal;\r
-       SYSTEMTIME st;\r
-       if (! ::FileTimeToLocalFileTime(pft, & ftLocal) || ! ::FileTimeToSystemTime(& ftLocal, & st))\r
-       {\r
-               return (time_t) 0;\r
-       }\r
-       wxDateTime dt(st.wDay, wxDateTime::Month(st.wMonth - 1), st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);\r
-       return dt;\r
-}\r
-\r
-//******************************************************************************\r
-//    Callback Wrapper\r
+//    Inline Functions\r
 //******************************************************************************\r
 \r
 #define MyConvEI322PI(EI, strconv) \\r
@@ -148,9 +132,68 @@ wxDateTime FileTimeToWxDateTime(FILETIME * pft)
        piInfo.fnDestination            = wxFileName(strconv(ex->szAddFileName)); \\r
        g_prProc(TPI_NOTIFY_COMMON, & piInfo);\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
+#define GetAPIAddress(name, unicode) GetProcAddress(g_LibInfo.hLib, (g_LibInfo.szPrefix + wxT(name) + ((unicode && g_LibInfo.fUnicode) ? wxT("W") : wxEmptyString)).char_str())\r
+#define GetAPIAddressAlt(name, unicode) GetProcAddress(g_LibInfoAlt.hLib, (g_LibInfoAlt.szPrefix + wxT(name) + ((unicode && g_LibInfoAlt.fUnicode) ? wxT("W") : wxEmptyString)).char_str())\r
+\r
+//******************************************************************************\r
+//    Callback Wrapper\r
+//******************************************************************************\r
+\r
 BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void * _lpEis)\r
 {\r
-       if (_uMsg != ::RegisterWindowMessage(WM_ARCEXTRACT))\r
+       static unsigned int uWM = ::RegisterWindowMessage(WM_ARCEXTRACT);\r
+       if (_uMsg != uWM)\r
        {\r
                // 独自仕様などに対する予備コード。\r
                return TRUE;\r
@@ -290,9 +333,6 @@ BOOL __stdcall EnumMembersProc(void * _lpEis)
 //    Inside Functions\r
 //******************************************************************************\r
 \r
-#define GetAPIAddress(name, unicode) GetProcAddress(g_LibInfo.hLib, (g_LibInfo.szPrefix + wxT(name) + ((unicode && g_LibInfo.fUnicode) ? wxT("W") : wxEmptyString)).char_str())\r
-#define GetAPIAddressAlt(name, unicode) GetProcAddress(g_LibInfoAlt.hLib, (g_LibInfoAlt.szPrefix + wxT(name) + ((unicode && g_LibInfoAlt.fUnicode) ? wxT("W") : wxEmptyString)).char_str())\r
-\r
 int ErrorCodeConvert(int nErrorCode)\r
 {\r
        switch (nErrorCode)\r
@@ -781,57 +821,6 @@ int __stdcall GetFileInformation
        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