00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "vms7zipFormatDLL.h"
00009 #include <archive\IArchive.h>
00010
00011 #ifdef _DEBUG
00012 #undef THIS_FILE
00013 static char THIS_FILE[]=__FILE__;
00014 #define new DEBUG_NEW
00015 #endif
00016
00017 vms7zipFormatDLL::vms7zipFormatDLL(LPCSTR pszDll)
00018 {
00019 m_hDll = NULL;
00020 m_pfnCreateObject = NULL;
00021 m_pfnGetHandlerProperty = NULL;
00022
00023 if (pszDll)
00024 Load (pszDll);
00025 }
00026
00027 vms7zipFormatDLL::~vms7zipFormatDLL()
00028 {
00029 Free ();
00030 }
00031
00032 bool vms7zipFormatDLL::Load(LPCSTR pszDll)
00033 {
00034 Free ();
00035 m_hDll = LoadLibrary (pszDll);
00036 if (m_hDll == NULL)
00037 return false;
00038 m_pfnCreateObject = (FNCreateObject)GetProcAddress (m_hDll, "CreateObject");
00039 m_pfnGetHandlerProperty = (FNGetHandlerProperty)GetProcAddress (m_hDll, "GetHandlerProperty");;
00040 return m_pfnCreateObject != NULL && m_pfnGetHandlerProperty != NULL;
00041 }
00042
00043 void vms7zipFormatDLL::Free()
00044 {
00045 if (m_hDll)
00046 {
00047 FreeLibrary (m_hDll);
00048 m_hDll = NULL;
00049 m_pfnCreateObject = NULL;
00050 m_pfnGetHandlerProperty = NULL;
00051 }
00052 }
00053
00054 HRESULT vms7zipFormatDLL::CreateObject(const GUID *classID, const GUID *interfaceID, void **outObject)
00055 {
00056 if (m_pfnCreateObject == NULL)
00057 return E_NOTIMPL;
00058
00059 return m_pfnCreateObject (classID, interfaceID, outObject);
00060 }
00061
00062 HRESULT vms7zipFormatDLL::GetHandlerProperty(PROPID propID, PROPVARIANT *value)
00063 {
00064 if (m_pfnGetHandlerProperty == NULL)
00065 return E_NOTIMPL;
00066
00067 return m_pfnGetHandlerProperty (propID, value);
00068 }
00069
00070 bool vms7zipFormatDLL::IsSupportedArchive(LPCSTR pszArchive)
00071 {
00072 LPCSTR pszExt;
00073 pszExt = strrchr (pszArchive, '.');
00074 if (pszExt == NULL)
00075 return false;
00076 pszExt++;
00077
00078 PROPVARIANT vt;
00079 PropVariantInit (&vt);
00080 if (FAILED (GetHandlerProperty (NArchive::kExtension, &vt)))
00081 return false;
00082
00083 CString str = vt.bstrVal;
00084 SysFreeString (vt.bstrVal);
00085
00086 if (FALSE == IsExtInExtsStr (str, pszExt))
00087 return false;
00088
00089 return true;
00090 }
00091
00092 HRESULT vms7zipFormatDLL::get_GUID(GUID *guid)
00093 {
00094 PROPVARIANT vt;
00095 HRESULT hr;
00096 hr = GetHandlerProperty (NArchive::kClassID, &vt);
00097 if (FAILED (hr))
00098 return hr;
00099
00100 CopyMemory (guid, vt.bstrVal, sizeof (GUID));
00101 SysFreeString (vt.bstrVal);
00102
00103 return S_OK;
00104 }