中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > COM技术
ATL中的可以单独使用的工具类
作者:未知 时间:2005-07-20 14:21 出处:VC知识库 责编:chinaitpower
              摘要:ATL中的可以单独使用的工具类
ATL中的可以单独使用的工具类

作者:Carfield

转载:http://blog.joycode.com/peon/

参考: http://www.codeproject.com/atl/atlserver.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfATLServerReference.asp

ATL7中除了制作COM和windows组件的大量的工具,还提供了大量的工具类,可以让我们在C++编程方面事半功倍。
微软在MFC中提供的大都是GUI的工具类,对于组件设计和一些服务的编程,未免有力有不逮的地方,ATL除了作为一个FrameWork作为MFC的补充外,还有很多可以单独抽出来使用的工具类,大大方便了我们的编程工作, 特别是在ATL7中,增加了很多这样的工具类,让我们瞧瞧:
1.首先要说的就是CString了,大家对她的感情自然不必多说,以往只有MFC才可以使用未免让人觉得可惜,甚至成为一些人在ATL组件中包含MFC的理由,现在也包含在ATL中了,只要#include <atlstr.h>就可以了。同样的可以在ATL中使用的还有CSize , CRect ,CPoint 等等。

2.CRegKey,操作注册表的好东东,因为在ATL3中就有了,大家也都很熟悉,就不多介绍了 。

3.HASH工具 - 下面是一个MD5代码:要包含atlcrypt.h头文件

void TestMd5Hash()
{
  const char* szPassword = "real9video.rm  ts=2003-12-23-16-23-9";
  CCryptProv prov;
  
  HRESULT hr = prov.Initialize();
  if( hr == 0x8009016L )
      prov.Initialize( PROV_RSA_FULL,NULL,MS_DEF_PROV,CRYPT_NEWKEYSET );


  //这个其实和下面的代码差不多  
  //CCryptKeyedHash   hash;
  //hash.Initialize(prov, CALG_MD5, CCryptKey::EmptyKey, 0);
  CCryptMD5Hash hash;
  hash.Initialize( prov );
  hash.AddString( szPassword );
  
  BYTE buf[1024];
  DWORD outLen;
  hash.GetValue( buf , &outLen   );

  printHex( buf , outLen );//这个大家自己实现,打印byte数组的内容

//应该是 BC CB 76 69 78 CF AB 4B 8 D E9 42 32 B0 88 9C

}
4.编码装换,下面是Base64和UTF8的转换,要包含atlenc.h
void Base64()
{
  CString sSource = "some string";
  int nDestLen = Base64EncodeGetRequiredLength(sSource.GetLength());
  CString str64;
  Base64Encode((const BYTE*)(LPCSTR)sSource, sSource.GetLength(),
  			str64.GetBuffer(nDestLen), &nDestLen);
  str64.ReleaseBuffer(nDestLen);
  cout<<(LPCSTR)str64;

  int nDecLen = Base64DecodeGetRequiredLength(nDestLen);
  CString strOrig;
  Base64Decode(str64, str64.GetLength(), (BYTE*)strOrig.GetBuffer(nDecLen), &nDecLen);
  strOrig.ReleaseBuffer(nDecLen);
  cout<<(LPCSTR)strOrig;
}

void UTF8Convert()
{
  char buf[128];
  memset( buf , 0 , 128 );
  int n = AtlUnicodeToUTF8( L"复件" , 2 , buf , 128 );

  printHex( (BYTE*)buf ,n );
}
5. CATLRegExp 正则表达式工具,msdn中有例子,这里也贴一下
CAtlRegExp<> regexp;
CAtlREMatchContext<> mc;
// match any line that starts with any number of digits,
// has a dash, and ends with any number of digits
if(regexp.Parse("^\\d+-\\d+$") == REPARSE_ERROR_OK)
{
       const char* szNumDashNum="5663-4662";
       if(regexp.Match(szNumDashNum, &mc)) { ATLTRACE("Matched"); }
}

(全文完)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有