VC調用vbscript.dll使用其Regex庫

來源:互聯網
上載者:User

 

最近要實現一個車險特別約定內的值填空,但是又不想錄單員隨便在特別約定內亂錄入,畢竟這是要列印到保單上面的,

所以考慮在在特別約定模板內增加部分文本彈出錄入後替換,所以用到了Regex.

 
VC6使用Regex的話,有很多選擇,最主要我覺得有兩種:一種是使用boost的Regex庫,還要一種是現在介紹的以com的方式調用的vbscript.dll了。

其中,我個人傾向於使用vbscript.dll的Regex庫,原因:主要是,感覺這麼小的功能,沒必要動用boost這樣的牛刀,殺這樣一隻螞蟻也不太合適,所以

還是使用vbscript.dll,而且這個使用這個也有很多優點的,在win平台下,該dll是系統內建的,在system32裡面。而且,考慮到一個問題,boost庫的正則

運算式似乎與.net裡面的有些許區別,而且javascript裡面用的Regex庫也是這個,總而言之,比較熟!

廢話有點多,總而言之,用這個好!

進入正題了,首先用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("無法建立Regex對象!");
    return;
}
pRegExp->PutPattern((_bstr_t)(const char *)m_strPattern);/*Regex*/

/**//*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();

 發張靚圖:

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.