zoukankan      html  css  js  c++  java
  • VC调用vbscript.dll使用其正则表达式库

    最近要实现一个车险特别约定内的值填空,但是又不想录单员随便在特别约定内乱录入,毕竟这是要打印到保单上面的,

    所以考虑在在特别约定模板内增加部分文本弹出录入后替换,所以用到了正则表达式.

     
    VC6使用正则表达式的话,有很多选择,最主要我觉得有两种:一种是使用boost的正则表达式库,还要一种是现在介绍的以com的方式调用的vbscript.dll了。

    其中,我个人倾向于使用vbscript.dll的正则表达式库,原因:主要是,感觉这么小的功能,没必要动用boost这样的牛刀,杀这样一只蚂蚁也不太合适,所以

    还是使用vbscript.dll,而且这个使用这个也有很多优点的,在win平台下,该dll是系统自带的,在system32里面。而且,考虑到一个问题,boost库的正则

    表达式似乎与.net里面的有些许区别,而且javascript里面用的正则表达式库也是这个,总而言之,比较熟!


    废话有点多,总而言之,用这个好!

    进入正题了,首先用vc以资源的方式打开C:\Windows\System32\vbscript.dll,注意以资源的方式打开,默认是auto,那就只是看到一个vbscript.dll了。

    选择typelib的第二项,选择导出成RegExp.tlb

    然后将RegExp.tlb拷到工程目录下,在stdafx.h里面加一句

    #import "RegExp.tlb"

    因为要调用com所以在InitInstance里面

    if(!AfxOleInit())
        AfxMessageBox(
    "Initial Failure");


    然后写个函数试一下

    UpdateData();

    VBScript_RegExp_10::IRegExpPtr pRegExp;
    HRESULT    hr;
    hr 
    = pRegExp.CreateInstance(__uuidof(VBScript_RegExp_10::RegExp));
    if(FAILED(hr)){
        MessageBox(
    "无法创建正则表达式对象!");
        
    return;
    }

    pRegExp
    ->PutPattern((_bstr_t)(const char *)m_strPattern);/*正则表达式*/

    /*If the RegExp.Global property is False (the default), MatchCollection will    contain only the first match. 
      If RegExp.Global is true, Matches> will contain all matches.
    */


    pRegExp
    ->PutGlobal(VARIANT_TRUE);

    VBScript_RegExp_10::IMatchCollectionPtr pMC 
    = 
           pRegExp
    ->Execute((_bstr_t)(const char *)m_strContent);/*要匹配的内容*/
    VBScript_RegExp_10::IMatchPtr pM;
    CString sTxt;
    for(int i=0;i<pMC->Count;i++){        
           pM 
    = pMC->GetItem(i);
           sTxt 
    = (char *)pM->GetValue();
           MessageBox(sTxt,
    "匹配项");
    }

    pRegExp.Release();

     发张靓图:

     

  • 相关阅读:
    Java单例模式深入详解
    深入理解Java的接口和抽象类
    java中为什么要给类使用代理?它有哪些好处?
    Log4j--java日志
    Log4j rootLogger配置
    selenium之 下拉选择框Select
    关于弹框
    spring controller接口中,用pojo对象接收页面传递的参数,发现spring在对pojo对象赋值时,有一定顺序的问题
    navicat mysql报错误:2013 Lost connection to MySQL server during query
    记录一次mysql导入千万条测试数据过慢的问题!
  • 原文地址:https://www.cnblogs.com/linbc/p/1409476.html
Copyright © 2011-2022 走看看