Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2716760
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2006-12-30 09:47:37

打算利用这几天看得 服务, 线程TLS API, 同步和STL写一个应用程序, 作为服务在后台执行, 检测指定路径的文件变化, 把修改过的匹配查询表达式的文件进行备份, 这样就有一个文件查询和名称匹配, 正则表达式自然是最好的解决方法. 不过VC里面竟然不如VBS对于Regular Expression那样有支持, 除非升级到VC.NET, 我到CodeProject上面查询找到了相关解决方案:

  其实VBS也是使用了微软自己REGEX的一个COM, 称为 "Microsoft VBScript Regular Expression 5.5" 我打开OleViewer找到了相关信息. 下面是那篇文章的使用例子

#import "RegExp.tlb" no_namespace
...
try {
  static IRegExpPtr regExp( __uuidof(RegExp) );
  regExp->attern = _bstr_t(lpszPattern);

  HWND hWndCtrl = pDX->repareEditCtrl(nIDC);
  if (pDX->m_bSaveAndValidate)
  {
          int nLen = ::GetWindowTextLength(hWndCtrl);
          ::GetWindowText(hWndCtrl, value.GetBufferSetLength(nLen),nLen+1);
          value.ReleaseBuffer();

          //now we verify it
          if ( regExp->Test( (LPCTSTR)value) )
          {
                  IMatchCollectionPtr matches=regExp->Execute((LPCTSTR)value);
                  if ( matches->Count== 1)
                  {
                          IMatchPtr match = matches->Item[0];
                          if ( match->FirstIndex==0 && match->Length == value.GetLength() )
                          {
                                return;
                          }
                  }
          }
          CString strMsg = CString("The input does not exactly have the pattern ") + lpszPattern;
          pDX->m_pDlgWnd->MessageBox(strMsg);
          pDX->repareEditCtrl(nIDC);
          pDX->Fail();
  }
  else
  {
  }
}
catch (_com_error& e)
{
        AfxMessageBox( e.ErrorMessage() );
}
这样操作就简单多了, 不过对于COM这东西, 我倒是情愿到下载一个类库, 不过不知道能不能使用在VC上面

例子里面的tlb文件是利用OLE Viewer得到IDL定义, 存储称为*.idl文件, 利用midl *.idl得到的*.tlb
阅读(1741) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~