张志松
记录工作点滴,留下人生轨迹。(zezese@163.com)
posts - 68,  comments - 11,  trackbacks - 0

头文件:

#pragma once

namespace VBScript_RegExp_55
{

class CMatch2 : protected COleDispatchDriver
{
 friend class CMatchCollection2;

 CMatch2(LPDISPATCH pDispatch);

public:

 CString GetValue();

 LONG GetFirstIndex();

 LONG GetLength();
};

class CMatchCollection2 : protected COleDispatchDriver
{
 friend class CRegExp2;

 CMatchCollection2(LPDISPATCH pDispatch);

public:

 CMatch2 GetItem(LONG index);
 
 LONG GetCount();
};

// CRegExp2 包装类

class  CRegExp2 : public COleDispatchDriver
{
public:

 CRegExp2(); // 调用 COleDispatchDriver 默认构造函数
 
 ~CRegExp2();

 BOOL CreateByReg();

private:

 CRegExp2(const CRegExp2 &rhs);
 CRegExp2 &operator=(const CRegExp2 &rhs);

 // IRegExp2 方法
public:

 CString GetPattern();
 void SetPattern(LPCTSTR newValue);

 BOOL IsIgnoreCase();
 void SetIgnoreCase(BOOL newValue = TRUE);

 BOOL IsGlobal();
 void SetGlobal(BOOL newValue = TRUE);

 BOOL IsMultiline();
 void SetMultiline(BOOL newValue = TRUE);

 CMatchCollection2 Execute(LPCTSTR sourceString);
 
 BOOL Test(LPCTSTR sourceString);

 CString Replace(LPCTSTR sourceString, LPCTSTR replaceString);
};

}

实现文件:

#include "stdafx.h"
#include "RegExp.h"

using namespace VBScript_RegExp_55;

//******************************************************************************

CMatch2::CMatch2(LPDISPATCH pDispatch)
: COleDispatchDriver(pDispatch)
{

}

CString CMatch2::GetValue()
{
 CString result;
 InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
 return result;
}

LONG CMatch2::GetFirstIndex()
{
 LONG result;
 InvokeHelper(0x2711, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
 return result;
}

LONG CMatch2::GetLength()
{
 LONG result;
 InvokeHelper(0x2712, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
 return result;
}

//******************************************************************************

CMatchCollection2::CMatchCollection2(LPDISPATCH pDispatch)
: COleDispatchDriver(pDispatch)
{
 TRACE("CMatchCollection2::CMatchCollection2\r\n");
}


CMatch2 CMatchCollection2::GetItem(LONG index)
{
 LPDISPATCH result = NULL;
 static BYTE parms[] = VTS_I4 ;
 InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, index);
 
 return CMatch2(result);
}

LONG CMatchCollection2::GetCount()
{
 LONG result = 0;
 InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
 return result;
}

//******************************************************************************

CRegExp2::CRegExp2()
{

}

CRegExp2::~CRegExp2()
{
 ReleaseDispatch();
}

BOOL CRegExp2::CreateByReg()
{
 return CreateDispatch(_T("VBScript.RegExp"));
}

CString CRegExp2::GetPattern()
{
 CString result;
 InvokeHelper(0x2711, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
 return result;
}

void CRegExp2::SetPattern(LPCTSTR newValue)
{
 static BYTE parms[] = VTS_BSTR ;
 InvokeHelper(0x2711, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}

BOOL CRegExp2::IsIgnoreCase()
{
 BOOL result = FALSE;
 InvokeHelper(0x2712, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
 return result;
}

void CRegExp2::SetIgnoreCase(BOOL newValue)
{
 static BYTE parms[] = VTS_BOOL ;
 InvokeHelper(0x2712, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}

BOOL CRegExp2::IsGlobal()
{
 BOOL result = FALSE;
 InvokeHelper(0x2713, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
 return result;
}

void CRegExp2::SetGlobal(BOOL newValue)
{
 static BYTE parms[] = VTS_BOOL ;
 InvokeHelper(0x2713, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}

BOOL CRegExp2::IsMultiline()
{
 BOOL result = FALSE;
 InvokeHelper(0x2717, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
 return result;
}

void CRegExp2::SetMultiline(BOOL newValue)
{
 static BYTE parms[] = VTS_BOOL ;
 InvokeHelper(0x2717, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}

CMatchCollection2 CRegExp2::Execute(LPCTSTR sourceString)
{
 LPDISPATCH result = NULL;
 static BYTE parms[] = VTS_BSTR ;
 InvokeHelper(0x2714, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, sourceString);

 return CMatchCollection2(result);
}

BOOL CRegExp2::Test(LPCTSTR sourceString)
{
 BOOL result = FALSE;
 static BYTE parms[] = VTS_BSTR ;
 InvokeHelper(0x2715, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, sourceString);
 return result;
}

CString CRegExp2::Replace(LPCTSTR sourceString, LPCTSTR replaceString)
{
 CString result;
 static BYTE parms[] = VTS_BSTR VTS_BSTR ;
 InvokeHelper(0x2716, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, sourceString, replaceString);
 return result;
}

具体使用:

记得 CoInitialize(NULL);

 VBScript_RegExp_55::CRegExp2 RegExp;

 RegExp.CreateByReg();

 RegExp.SetPattern("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");//IP地址

 VBScript_RegExp_55::CMatchCollection2 myc = RegExp.Execute("sdffdgfd192.168.101.23w2r4tfghtyj");

 AfxMessageBox(myc.GetItem(0).GetValue());

posted on 2011-01-09 14:04 张志松 阅读(734) 评论(0)  编辑 收藏 引用 所属分类: VC/MFC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

转载

搜索

  •  

最新评论

阅读排行榜

评论排行榜