XTPRegExp.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPRegExp.h : RegExp Helpers
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPREGEXP_H__)
  22. #define __XTPREGEXP_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #pragma pack(push, 8)
  28. #if (_MSC_VER > 1100)
  29. #pragma warning(push)
  30. #endif
  31. #pragma warning(disable : 4310)
  32. #pragma warning(disable : 4244)
  33. #pragma warning(disable : 4786)
  34. #include <comdef.h>
  35. namespace XTPREGEXP {
  36. //
  37. // Forward references and typedefs
  38. //
  39. struct __declspec(uuid("3f4daca0-160d-11d2-a8e9-00104b365c9f"))
  40. /* dual interface */ IRegExp;
  41. struct __declspec(uuid("3f4daca1-160d-11d2-a8e9-00104b365c9f"))
  42. /* dual interface */ IMatch;
  43. struct __declspec(uuid("3f4daca2-160d-11d2-a8e9-00104b365c9f"))
  44. /* dual interface */ IMatchCollection;
  45. struct /* coclass */ RegExp;
  46. //
  47. // Smart pointer typedef declarations
  48. //
  49. _COM_SMARTPTR_TYPEDEF(IRegExp, __uuidof(IRegExp));
  50. _COM_SMARTPTR_TYPEDEF(IMatch, __uuidof(IMatch));
  51. _COM_SMARTPTR_TYPEDEF(IMatchCollection, __uuidof(IMatchCollection));
  52. //
  53. // Type library items
  54. //
  55. struct __declspec(uuid("3f4daca0-160d-11d2-a8e9-00104b365c9f"))
  56. IRegExp : public IDispatch
  57. {
  58. //
  59. // Raw methods provided by interface
  60. //
  61. virtual HRESULT __stdcall get_Pattern (
  62. BSTR * pPattern ) = 0;
  63. virtual HRESULT __stdcall put_Pattern (
  64. BSTR pPattern ) = 0;
  65. virtual HRESULT __stdcall get_IgnoreCase (
  66. VARIANT_BOOL * pIgnoreCase ) = 0;
  67. virtual HRESULT __stdcall put_IgnoreCase (
  68. VARIANT_BOOL pIgnoreCase ) = 0;
  69. virtual HRESULT __stdcall get_Global (
  70. VARIANT_BOOL * pGlobal ) = 0;
  71. virtual HRESULT __stdcall put_Global (
  72. VARIANT_BOOL pGlobal ) = 0;
  73. virtual HRESULT __stdcall Execute (
  74. BSTR sourceString,
  75. IDispatch * * ppMatches ) = 0;
  76. virtual HRESULT __stdcall Test (
  77. BSTR sourceString,
  78. VARIANT_BOOL * pMatch ) = 0;
  79. virtual HRESULT __stdcall Replace (
  80. BSTR sourceString,
  81. BSTR replaceString,
  82. BSTR * pDestString ) = 0;
  83. };
  84. struct __declspec(uuid("3f4daca1-160d-11d2-a8e9-00104b365c9f"))
  85. IMatch : public IDispatch
  86. {
  87. //
  88. // Raw methods provided by interface
  89. //
  90. virtual HRESULT __stdcall get_Value (
  91. BSTR * pValue ) = 0;
  92. virtual HRESULT __stdcall get_FirstIndex (
  93. long * pFirstIndex ) = 0;
  94. virtual HRESULT __stdcall get_Length (
  95. long * pLength ) = 0;
  96. };
  97. struct __declspec(uuid("3f4daca2-160d-11d2-a8e9-00104b365c9f"))
  98. IMatchCollection : public IDispatch
  99. {
  100. //
  101. // Raw methods provided by interface
  102. //
  103. virtual HRESULT __stdcall get_Item (
  104. long index,
  105. IDispatch * * ppMatch ) = 0;
  106. virtual HRESULT __stdcall get_Count (
  107. long * pCount ) = 0;
  108. virtual HRESULT __stdcall get__NewEnum (
  109. IUnknown * * ppEnum ) = 0;
  110. };
  111. struct __declspec(uuid("3f4daca4-160d-11d2-a8e9-00104b365c9f")) RegExp;
  112. }
  113. class CXTPRegExp
  114. {
  115. public:
  116. CXTPRegExp()
  117. {
  118. }
  119. public:
  120. void SetPattern(LPCTSTR lpszPattern)
  121. {
  122. if (!CreateInstance())
  123. return;
  124. m_regexpPtr->put_Pattern(_bstr_t(lpszPattern));
  125. }
  126. void SetMatchCase(BOOL bMatchCase)
  127. {
  128. if (!CreateInstance())
  129. return;
  130. m_regexpPtr->put_IgnoreCase(bMatchCase ? VARIANT_FALSE : VARIANT_TRUE);
  131. }
  132. public:
  133. BOOL Test(LPCTSTR lpszSourceString)
  134. {
  135. if (!CreateInstance())
  136. return FALSE;
  137. VARIANT_BOOL bTest = VARIANT_FALSE;
  138. if (FAILED(m_regexpPtr->Test(_bstr_t(lpszSourceString), &bTest)))
  139. return FALSE;
  140. return bTest != VARIANT_FALSE;
  141. }
  142. BOOL Replace(LPCTSTR lpszSourceString, LPCTSTR lpszReplaceString, CString& strDestString)
  143. {
  144. if (!CreateInstance())
  145. return FALSE;
  146. BSTR bstrResult = 0;
  147. if (FAILED(m_regexpPtr->Replace(_bstr_t(lpszSourceString), _bstr_t(lpszReplaceString), &bstrResult)))
  148. return FALSE;
  149. strDestString = bstrResult;
  150. SysFreeString(bstrResult);
  151. return TRUE;
  152. }
  153. long Execute(LPCTSTR lpszSourceString)
  154. {
  155. m_matchesPtr = NULL;
  156. if (!CreateInstance())
  157. return 0;
  158. long nCount = 0;
  159. IDispatch* _result = 0;
  160. if (SUCCEEDED(m_regexpPtr->Execute(_bstr_t(lpszSourceString), &_result)))
  161. {
  162. m_matchesPtr = _result;
  163. if (m_matchesPtr != NULL)
  164. {
  165. m_matchesPtr->get_Count(&nCount);
  166. }
  167. }
  168. if (_result) _result->Release();
  169. if (nCount == 0) m_matchesPtr = NULL;
  170. return nCount;
  171. }
  172. BOOL GetMatch(long nIndex, long* pnFirstIndex, long* pnLength)
  173. {
  174. if (m_matchesPtr == NULL)
  175. return FALSE;
  176. if (pnFirstIndex == 0 || pnLength == 0)
  177. return FALSE;
  178. long nCount = 0;
  179. m_matchesPtr->get_Count(&nCount);
  180. if (nIndex >= nCount)
  181. return FALSE;
  182. IDispatch* _result = 0;
  183. if (FAILED(m_matchesPtr->get_Item(nIndex, &_result)))
  184. return FALSE;
  185. XTPREGEXP::IMatchPtr match =_result;
  186. if (_result) _result->Release();
  187. if (match == NULL)
  188. return FALSE;
  189. match->get_FirstIndex(pnFirstIndex);
  190. match->get_Length(pnLength);
  191. return TRUE;
  192. }
  193. protected:
  194. BOOL CreateInstance()
  195. {
  196. if (m_regexpPtr == NULL)
  197. {
  198. if (!SUCCEEDED(m_regexpPtr.CreateInstance(__uuidof(XTPREGEXP::RegExp))))
  199. {
  200. TRACE(_T("Warning: CreateInstance failed in CXTPRegExp --n"));
  201. TRACE(_T("tperhaps AfxOleInit() has not been called"));
  202. return FALSE;
  203. }
  204. }
  205. return TRUE;
  206. }
  207. protected:
  208. XTPREGEXP::IRegExpPtr m_regexpPtr;
  209. XTPREGEXP::IMatchCollectionPtr m_matchesPtr;
  210. };
  211. #if (_MSC_VER > 1100)
  212. #pragma warning(pop)
  213. #endif
  214. #pragma pack(pop)
  215. #endif //#if !defined(__XTPREGEXP_H__)