C++第三方库总结

来源:互联网 发布:淘宝店铺图标大全 编辑:程序博客网 时间:2024/06/05 02:02

常用C++第三方库

http://blog.csdn.net/dove1984/article/details/8244209


基础类
1、 DinkumwareC++ Library
参考站点:http://www.dinkumware.com
P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C+ +的产品中采用Dinkumware的库。
2、 RogueWaveStandard C++ Library
参考站点:http://www.roguewave.com
这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。
3、SGI STL
参考站点:http://www.roguewave.com
SGI公司的C++标准模版库。
4、STLport
参考站点:http://www.stlport.org
SGI STL库的跨平台可移植版本。


5、准标准库——Boost
Boost 库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不


扣的"准"标准库。
Boost中比较有名气的有这么几个库:
Regex 
正则表达式库
Spirit 
LL parser framework,用C++代码直接表达EBNF
Graph 
图组件和算法
Lambda 
在调用的地方定义短小匿名的函数对象,很实用的functional功能
Concept check 
检查泛型编程中的concept
MPL 
用模板实现的元编程框架
Thread 
可移植的C++多线程库
Python 
把C++类和函数映射到Python之中
Pool 
内存池管理
Smart_ptr 
5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:
Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr. Dobb's Journal软件研发杂志》第7辑上的译文。
Boost 总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost 中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩


展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。
参考站点:http://www.boost.org(国内镜像:http://www.c-view.org/tech/lib/boost/index.htm)
GUI
 
在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。
1) MFC
大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,


同时它还提供了所有一般 C++ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在 Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。
2) QT
参考网站:http://www.trolltech.com
Qt 是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数


千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。
3) WxWindows
参考网站:http://www.wxwindows.org
跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的 GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的C++Builder X的GUI设计器就是基于这个库的。
4) Fox
开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。
参考网站:http://www.fox-toolkit.org/
5)   WTL
基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。
6)   GTK
参考网站:http://gtkmm.sourceforge.net/
GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而GTK就是这个库的C++封装版本。
 
网络通信
 
1) ACE
参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html
C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ 包装外观(Wrapper Facade)


和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。
2) StreamModule
参考网站:http://www.omnifarious.org/StrMod/
设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。
3) SimpleSocket
参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm
这个类库让编写基于socket的客户/服务器程序更加容易。
4) A Stream Socket API for C++
参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html
又一个对Socket的封装库。
 
XML
 
1) Xerces
参考网站:http://xml.apache.org/xerces-c/
Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOMAPI。XML验证在文档类型定义(Document TypeDefinition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XML Schema 的基本完整的开放标准。
2) XMLBooster
参考网站:http://www.xmlbooster.com/
这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。
3) Pull Parser
参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp/
这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。
4) Xalan
参考网站:http://xml.apache.org/xalan-c/
Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。
5) CMarkup
参考网站:http://www.firstobject.com/xml.htm'>http://www.firstobject.com/xml.htm
这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。
6) libxml++
http://libxmlplusplus.sourceforge.net/
libxml++是对著名的libxml XML解析器的C++封装版本 
7) TinyXml
参考网站:http://sourceforge.net/projects/tinyxml/ 
 如果您的XML只需要支持Ansi和UTF8编码,只需要做些简单的XML解析,TinyXML是很好的选择,小而精。
 
科学计算
 
1) Blitz++
参考网站:http://www.oonumerics.org/blitz/
Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序


执行甚至可以比Fortran更快。 Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。
2) POOMA
参考网站:http://www.codesourcery.com/pooma/pooma
POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。
3) MTL
参考网站:http://www.osl.iu.edu/research/mtl/
Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。
4) CGAL
参考网站:www.cgal.org
Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。
 
游戏开发
 
1) Audio/Video 3D C++ Programming Library
参考网站:http://www.galacticasoftware.com/products/av/
AV3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。
2) KlayGE
参考网站:http://home.g365.net/enginedev/
国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。
3) OGRE
参考网站:http://www.ogre3d.org
OGRE (面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实


世界对象的接口和其它类。
 
线程
 
1) C++ Threads
参考网站:http://threads.sourceforge.net/
这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境中很难看到的大量的线程方面的功能。
2) ZThreads
参考网站:http://zthread.sourceforge.net/
一个先进的面向对象,跨平台的C++线程和同步库。
 
序列化
 
1) s11n
参考网站:http://s11n.net/
一个基于STL的C++库,用于序列化POD,STL容器以及用户定义的类型。
2) Simple XML Persistence Library
参考网站:http://sxp.sourceforge.net/
这是一个把对象序列化为XML的轻量级的C++库。
 
字符串
 
1) C++ Str Library
参考网站:http://www.utilitycode.com/str/
操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的代码,并且支持多线程环境和Unicode,同时还有正则表达式的支持。
2) Common Text Transformation Library
参考网站:http://cttl.sourceforge.net/
这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入,替换以及用EBNF的语法进行解析。
3) GRETA
参考网站:http://research.microsoft.com/projects/greta/
这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况下有非常优秀的表现。
 
综合
 
1) P::Classes
参考网站:http://pclasses.com/
一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot机制,i/o系统包括基于插件的网络协议透明的i/o架构,基于插件的应用程序消息日志框架,访问sql数据库的类等等。
2) ACDK - Artefaktur Component Development Kit
参考网站:http://acdk.sourceforge.net/
这是一个平台无关的C++组件框架,类似于Java或者.NET中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对Java, Perl, Python, TCL, Lisp,COM 和 CORBA的集成。
3) dlib C++ library
参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/
各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的API等等。
4) Chilkat C++ Libraries
参考网站:http://www.c'>http://www.c'>http://www.c'>http://www.chilkatsoft.com/cpp_libraries.asp
这是提供zip,e-mail,编码,S/MIME,XML等方面的库。
5) C++ Portable Types Library (PTypes)
参考网站:http://www.melikyan.com/ptypes/'>http://www.melikyan.com/ptypes/
这是STL的比较简单的替代品,以及可移植的多线程和网络库。
6) LFC
参考网站:http://lfc.sourceforge.net/
哦,这又是一个尝试提供一切的C++库
 
图形图像
1)  CxImage
CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。
2) FreeImage
FreeImage是一款免费的、开源的、跨平台(Windows 、Linux 和Mac OS X )的,支持20 多种图像类型的(如BMP 、JPEG 、GIF 、PNG 、TIFF 等)图像处理库。其最大优点就是采用插件驱动型架构,具有快速、灵活、简单易用的特点,得到了广泛使用。
3) OpenCV
OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法,运用非常广。
 
PDF
 
1)PoDoFo 
http://podofo.sourceforge.NET/
PoDoFo是一个用来操作PDF 文件格式的C++ 类库。它还包含一些小工具用来解析、修改和创建 PDF 文档。
2)Xpdf
http://www.foolabs.com/xpdf/download.html
Xpdf是一个开放源代码的PDF档案浏览器,Xpdf可解码LZW压缩格式并阅读加密的PDF文件。
3)Poppler 
http://poppler.freedesktop.org/
Poppler是一个用来生成PDF 的C++类库,从xpdf继承而来。它使用了很多先进的类库例如freetype和cairois来达到更好的输出效果,同时也提供了一组命令行工具包。
4)JagPDF 
http://www.jagpdf.com/
JagPDF提供给C/C++ 和Python 编程语言用来生成PDF 文档的库。
5)libHaru
http://libharu.org/wiki/Downloads
开源的PDF库
6)CLibPDF
http://hpux.connect.org.uk/hppd/hpux/Shells/ClibPDF-2.02/
ClibPDF是C函数库,可以直接生成PDF文件, 不需要Adobe Acrobat等工具支持.
 
其他库
 
1) Loki
参考网站:http://www.moderncppdesign.com/
哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中把C++模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。
2) ATL
ATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。
3) FC++: The Functional C++ Library
这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另一分的乐趣,可以去看看函数式程序设计的世界。大师 PeterNorvig在 "Teach Yourself Programming in TenYears"一文中就将函数式语言列为至少应当学习的6


类编程语言之一。
4) FACT!
参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html
另外一个实现函数式语言特性的库
5) Crypto++
提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。


6) Managed C++ wrapper for ZLib
压缩组件Zlib的C++类库
7) CppSQLite - C++ Wrapper for SQLite
SQLite C++封装库
另:
Loki : Anders Alexandr的代码库,设计精巧,提供智能指针,Functor,TypeList等。
Xalan : XML XSLT支持库,配合Xerces使用,Apache的一贯传统,大而全。
ICU : IBM的Unicode实现,有JAVA和C++/C两种版本,支持各种编码,国际化和本地化功能,但是,很庞大,8M左右。
libiconv : GNU的UNICODE实现,提供各种字符集到UNICODE之间的转换功能,1M左右。
cURL : 从名字可以看出来,c操作URL资源的库,完善支持HTTP,SHTTP,FTP等协议,比WinINet好使,与正在“烟酒”中的WinHTTP有一拼。
IT++: 专业的数学库。
GC6.2: C++垃圾回收器,很好使。GCC自带,Mono中使的也是它。
libcurl :一个有名的开源网络爬虫库
ffmpeg :一个关于音频视频处理的库
ode,bullet :开源的物理引擎库
========

c++软件开发第三方库大全

1.boost 这个使用的人多不多说了
2.pthread windows下的posix线程实现
3.libcurl 一个有名的开源网络爬虫库 阿里旺旺中使用到了
4.libeay32 OpenSSL Library
5.libtidy 一个专门解析htm的库
6.zlib 这个鬼都知道
7.freetype c接口的type2字体处理库
8.libmad 一个编解码mp3的库
9.libogg,等 一个编解码ogg音频格式的库
10.libsnd 一个开源的编解码十多种音频格式的库
11.ffmpeg 一个关于音频视频处理的库
12.Freeimage,Cximage,Devil 这3个都是用来处理图形的库
13.libpng,libjpeg,....基本同上
14.angelscript 一个类似lua的脚本引擎 其脚本风格类似于标准c语言
15.flac/flac++一个编解码flac音频格式的库
16.tinyxml,rapidxml,libxml 都是关于xml解析方面的
17.luaplus,luabind都是涉及绑定lua和c++的库
18.ode,bullet 开源的物理引擎库
19.timidity一个可以把mid音频格式转化为wav格式的库
20.vlc一个类似ffmeg的库
21.zthread一个类型boost-thread,pthread的c++风格的多线程库
22.sigc++,sigslot信号插槽库 类型的有boost中的signal
23.SDL 简单的音频视频库
24.hge一个简单的使用ddraw的2维游戏小引擎
25.opencv一个开源的处理图形的库
26.mygui,cegui 都是游戏上使用的GUI系统
27.鬼火游戏引擎,Orge,都是开源的游戏中间件
28.Wxwidget一个开源的跨平台,类似MFC
29.QT ..
30.loki一个实验性质的c++库
31.ace一个网络通信库
32.fmod一个有点名气的游戏音效引擎
33.sqlite 一个开源的桌面数据库
========

vc第三方界面库BCGControlBar与Xtreme Toolkit对比

http://www.webui8.com/xinwen/557


BCGControlBar简介 
BCGControlBar专业版(BCGControlBar Pro for MFC )是MFC的扩展类库,一直是MFC界面领域的老大哥,而且是微软合作商,对微软的产品兼容性都很好。可以用于构建Microsoft Office 2000/XP/2003/2007/2010/2013 和 Microsoft Visual Studio-like(打印、用户定


制工具栏、菜单等)以及其他一些知名产品的高级用户界面,例如:日历、网格、编辑和甘特图等。BCG在国内有大量忠实用户,因此中文文档比较多,便于新手上手vc第三方界面库。


Xtreme Toolkit简介 


Xtreme Toolkit专业版(Xtreme Toolkit Pro)比BCG要晚一点出来,但它在众多VC界面库中杀出了一条血路,屡获大奖,是唯一一款可以和BCG媲美的VC界面库vc第三方界面库。与BCG一样,Xtreme同样支持最新的VS2013和Windows 8.1。它最大的特色就是集成了11个高度


优化的界面组件:Command Bars, Controls, Chart Pro, Calendar, Docking Pane, Property Grid, Report Control, Shortcut Bar, Syntax Edit, Skin Framework 和 Task Panel。


安装过程


BCGControlBar的安装过程可谓一波三折,因为最新版本是v22.1,要求VC++6.0的版本是SP6,最好把VC++的MSDN也安装上。而最开始的时候我以为有了VS2008的MSDN就不需要VC++的MSDN,结果均安装失败,直到安装了VC++的MSDN。


Xtreme Toolkit的安装就要顺畅很多,根据提示和要求,选择安装即可。它们都支持和VS2008的集成。


功能比较


BCGControlBar提供了很多子控件,如表格、日历、Ribbon、Windows UI Tiles等等,不仅如此,子控件的功能也是非常丰富的,如表格,就具有过滤、分组、模糊查询等等,不仅如此,它还支持扩展编辑器,我们可以在表格单元中放入checkbox、color编辑器等等,这


些扩 展功能,能够满足开发人员的各种需求,使用方便。BCG对这些控件的介绍也非常详细,如Ribbon控件,就分了多达19项内容,每一条都有介绍、界面展示和示例代码。正在使用BCG的朋友可以参考BCGControlBar帮助文档


Xtreme Toolkit在这方面较BCGControlBar,也是不相伯仲,它们都有着丰富的功能和子控件,还有优秀的扩展功能。详细的功能可以查看Xtreme Toolkit中文介绍。


界面风格


既然是界面控件的产品,那么在展示上,它们的比较又会是怎样的呢?个人感觉BCGControlBar在这方面要比Xtreme Ttoolkit丰富,就皮肤而言,BCGControlBar的更新基本上是与微软同步的,如Office2003/2007/2010/2013、VS2005/2008/2012/2013等等。有兴趣的朋友


可以看一下这个BCG的界面展示。


而Xtreme toolkit目前只提供到Office 2010和VS2012主题,不过它和BCG一样都支持自定义主题。


vc第三方界面库BCGControlBar与Xtreme Toolkit对比http://www.webui8.com/xinwen/557


BCGControlBar简介 
BCGControlBar专业版(BCGControlBar Pro for MFC )是MFC的扩展类库,一直是MFC界面领域的老大哥,而且是微软合作商,对微软的产品兼容性都很好。可以用于构建Microsoft Office 2000/XP/2003/2007/2010/2013 和 Microsoft Visual Studio-like(打印、用户定


制工具栏、菜单等)以及其他一些知名产品的高级用户界面,例如:日历、网格、编辑和甘特图等。BCG在国内有大量忠实用户,因此中文文档比较多,便于新手上手vc第三方界面库。


Xtreme Toolkit简介 


Xtreme Toolkit专业版(Xtreme Toolkit Pro)比BCG要晚一点出来,但它在众多VC界面库中杀出了一条血路,屡获大奖,是唯一一款可以和BCG媲美的VC界面库vc第三方界面库。与BCG一样,Xtreme同样支持最新的VS2013和Windows 8.1。它最大的特色就是集成了11个高度


优化的界面组件:Command Bars, Controls, Chart Pro, Calendar, Docking Pane, Property Grid, Report Control, Shortcut Bar, Syntax Edit, Skin Framework 和 Task Panel。


安装过程


BCGControlBar的安装过程可谓一波三折,因为最新版本是v22.1,要求VC++6.0的版本是SP6,最好把VC++的MSDN也安装上。而最开始的时候我以为有了VS2008的MSDN就不需要VC++的MSDN,结果均安装失败,直到安装了VC++的MSDN。


Xtreme Toolkit的安装就要顺畅很多,根据提示和要求,选择安装即可。它们都支持和VS2008的集成。


功能比较


BCGControlBar提供了很多子控件,如表格、日历、Ribbon、Windows UI Tiles等等,不仅如此,子控件的功能也是非常丰富的,如表格,就具有过滤、分组、模糊查询等等,不仅如此,它还支持扩展编辑器,我们可以在表格单元中放入checkbox、color编辑器等等,这


些扩 展功能,能够满足开发人员的各种需求,使用方便。BCG对这些控件的介绍也非常详细,如Ribbon控件,就分了多达19项内容,每一条都有介绍、界面展示和示例代码。正在使用BCG的朋友可以参考BCGControlBar帮助文档


Xtreme Toolkit在这方面较BCGControlBar,也是不相伯仲,它们都有着丰富的功能和子控件,还有优秀的扩展功能。详细的功能可以查看Xtreme Toolkit中文介绍。


界面风格


既然是界面控件的产品,那么在展示上,它们的比较又会是怎样的呢?个人感觉BCGControlBar在这方面要比Xtreme Ttoolkit丰富,就皮肤而言,BCGControlBar的更新基本上是与微软同步的,如Office2003/2007/2010/2013、VS2005/2008/2012/2013等等。有兴趣的朋友


可以看一下这个BCG的界面展示。


而Xtreme toolkit目前只提供到Office 2010和VS2012主题,不过它和BCG一样都支持自定义主题。
========

C++第三方常用库

http://blog.csdn.net/fanyun_01/article/details/50855518


在C++中,库的地位是非常高的。C++之父   Bjarne  Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作



在程序开发过程中,经常会引用第三方已经开发好的库:
(一)  尽量使用开源的第三方库
这样就可以拿到第三方库的源码,然后自己编译,根据自己的需求。
msdn 上有这样一段话: 
警告 不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,


当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非调试版本)。
(二)  直接使用第三库,需要弄清依赖关系
如果直接使用一些比较成熟库,我建议使用一些工具,比如说使用depends查看一下这个第三方库还依赖于哪些库。 
比如,有的库还是依赖于msvcp等几个dll,这样对于没有安装过VS等编译器的计算机就无法运行您的程序。
另外,附上一些C++开源库: 
1. Boost  C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。   Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。Boost中比较有名气的有这么几个库:   
  Regex   
  正则表达式库   
  Spirit   
  LL   parser   framework,用C++代码直接表达EBNF   
  Graph   
  图组件和算法   
  Lambda   
  在调用的地方定义短小匿名的函数对象,很实用的functional功能   
  concept   check   
  检查泛型编程中的concept   
  Mpl   
  用模板实现的元编程框架   
  Thread   
  可移植的C++多线程库   
  Python   
  把C++类和函数映射到Python之中   
  Pool   
  内存池管理   
  smart_ptr    
2.pthread windows下的posix线程实现 
3.libcurl 一个有名的开源网络爬虫库 阿里旺旺中使用到了 
4.libeay32 OpenSSL Library 
5.libtidy 一个专门解析htm的库 
6.zlib 这个鬼都知道 
7.freetype c接口的type2字体处理库 
8.libmad 一个编解码mp3的库 
9.libogg,等 一个编解码ogg音频格式的库 
10.libsnd 一个开源的编解码十多种音频格式的库 
11.ffmpeg 一个关于音频视频处理的库 
12.Freeimage,Cximage,Devil 这3个都是用来处理图形的库 
13.libpng,libjpeg,….基本同上 
14.angelscript 一个类似lua的脚本引擎 其脚本风格类似于标准C语言 
15.flac/flac++一个编解码flac音频格式的库 
16.tinyxml,rapidxml,libxml 都是关于xml解析方面的 
17.luaplus,luabind都是涉及绑定lua和c++的库 
18.ode,bullet 开源的物理引擎库 
19.timidity一个可以把mid音频格式转化为wav格式的库 
20.vlc一个类似ffmeg的库 
21.zthread一个类型boost-thread,pthread的c++风格的多线程库 
22.sigc++,sigslot信号插槽库 类型的有boost中的signal 
23.SDL 简单的音频视频库 
24.hge一个简单的使用ddraw的2维游戏小引擎 
25.OpenCV一个开源的处理图形的库 
26.mygui,cegui 都是游戏上使用的GUI系统 
27.鬼火游戏引擎,Orge,都是开源的游戏中间件 
28.Wxwidget一个开源的跨平台,类似MFC 
29.QT   Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界


范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE   的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。   
30.loki一个实验性质的c++库 
31.ace一个网络通信库 
32.fmod一个有点名气的游戏音效引擎 
33.sqlite 一个开源的桌面数据库
34.大名鼎鼎的微软基础类库(Microsoft   Foundation   Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows   API   之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立   Windows 程序时必


须编写的代码,同时它还提供了所有一般   C++  编程的优点,例如继承和封装。
35.WTL  基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。   
36.GTK GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而GTK就是这个库的C++封装版本。  
37.网络通信   ACE库    C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive  Communication   Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++


包装外观(Wrapper   Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。   
38. StreamModule  设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。  
39. SimpleSocket  这个类库让编写基于socket的客户/服务器程序更加容易。
40. Blitz++是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++  一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比   Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术


,程序执行甚至可以比Fortran更快。Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。   
========

VC UI界面库大集合

http://www.cnblogs.com/findumars/p/3948469.html?utm_source=tuicool


Guitoolkit


http://www.beyondata.com/pwc.html


The Ultimate Toolbox
http://www.codeproject.com/KB/MFC/UltimateToolbox.aspx


GuiToolkit(开源,类似Visual Studio 2003风格)
http://www.beyondata.com/default.htm


GardenUI(免费,界面效果挺好的,XML,代码 界面 分离)
http://www.gardenui.com/


CJLib(开源,免费,UNICODE编码,是xtreme toolkit的前生,但xtreme toolkit收费了)
http://www.codejock.com/


LibUIDK(部分免费,不开源,效果好,适合贴图)
http://www.iuishop.com/download.htm


BCGControlBar(收费,界面感觉和Office类似)
http://www.bcgsoft.com


SKin++(收费,界面很好看,从它的截图上可以看出)
http://www.uipower.com/


SkinMagic(收费,看起来像Office)
http://appspeed.com/html/download.html


ActiveSkin(未知)
http://www.softshape.com/software/develop/


SYGUI(收费,类似Office)
http://www.sygui.com/


一般到下面两个网站找自己需要的控件,可以参考一下:
http://www.vckbase.com/code/
http://www.codeproject.com/


VC界面库和皮肤库介绍


CJLib(mfc扩展开发包,是xtreme toolkit的前生,但xtreme toolkit收费了)
http://www.codejock.com/


BCGControlBar(收费,mfc扩展开发包,功能很强大)
http://www.bcgsoft.com


SkinMagic(收费,看起来像Office)
http://appspeed.com/html/download.html


AppFace(收费,支持 mfc ,VCL,ATL , WTL 框架 )
http://www.appface.com/chs/index.htm


SKin++(收费,界面很好看)
http://www.uipower.com/


USkin(收费,界面很好看)
http://www.neemedia.com/


SYGUI(收费,mfc扩展框架)
http://www.sygui.com/


LibUIDK(部分免费,不开源,效果好,适合贴图)
http://www.iuishop.com/download.htm


GuiToolkit(开源,mfc扩展框架)
http://www.beyondata.com/default.htm


GardenUI(免费,界面效果挺好的,XML,代码界面分离)
http://www.gardenui.com/


VC 常用插件 
1.Visual Assist(强烈推荐)
http://www.wholetomato.com/
VA从5.0一直到现在的VAX,功能越来越强大,除了以前版本中的自动识别各种关键字,系统函数,成员变量,自动给出输入提示,自动更正大小写错误,自动标示错误等等以外,最新的版本中还在
WorkSpace窗口中加入一个VA View,可以更方便的查找工程中的文件、类和变量。


2.WndTabs(强烈推荐)
http://www.wndtabs.com/
WndTabs主要是在编辑窗口中显示了所有已经打开的文件,在VC中能够更方便的操作这些文件,比如修改文件属性,copy文件路径、文件名等,并且还开放源代码,你要是愿意的话,可以添加自己很兴趣的功能。


3.LineCounter
http://www.wndtabs.com/


用来统计整个工程的代码行数,包括总行数、代码行数、注释行数、空行数等,并且对多个工程一起统计时,不会把相同的文件计算多次.


4.Spelly
http://www.wndtabs.com/
一个拼写检查的插件,可以对整个文件或所选部分进行拼写检查,支持C/C++/C#, VB, Fortran 和HTML。 


5.SourceStyler C++
http://www.sourcestyler.com/
此插件是针对C++的一个格式化工具,可以针对自己的编码习惯,选择一种编码风格,也可以自己定义,而且定义非常详细,有表达式、指针、模板、类、枚举等十几种,肯定能满足你的需要


6.Numega BoundsChecker(强烈推荐)
是针对Visual C++6.0应用程序的最为全面的错误检测工具。BoundsChecker 能自动指出静态,堆栈内存错误和资源泄漏问题。BoundsChecker 能够校验最新的 Windows APIs,包括 ActiveX, DirectX, OLE/COM, ODBC等等。能够发现与 Windows 平台兼容性。


7.BCGControlBar Library
非常好的一套应用于vc6的界面扩展类库,轻松的作出 vc2003 的界面。并且给了各种界面例子,如vc.net、outlook、更换皮肤等等。


8.Comment Wizard
Visual C++插件,提供了Visual C++源代码注解标准化与自动化功能。在它的帮助下,您可快速创建标头文件信息注解,文件中模块注解, C++处理方式,以及C语言功能与历史校正功能注解,等等。 


VC 界面库 收集 


GuiToolkit(开源,类似Visual Studio 2003风格)
http://www.beyondata.com/default.htm


GardenUI(免费,界面效果挺好的,XML,代码 界面 分离)
http://www.gardenui.com/


CJLib(开源,免费,UNICODE编码,是xtreme toolkit的前生,但xtreme toolkit收费了)
http://www.codejock.com/


LibUIDK(部分免费,不开源,效果好,适合贴图)
http://www.iuishop.com/download.htm


BCGControlBar(收费,界面感觉和Office类似)
http://www.bcgsoft.com


SKin++(收费,界面很好看)
http://www.uipower.com/


SkinMagic(与SKin++类似)
http://appspeed.com/html/download.html


ActiveSkin(未知)
http://www.softshape.com/software/develop/


SYGUI(收费,类似Office)
http://www.sygui.com/




MFC界面库: GUIToolkit 和 SYGUI


官网:


http://www.beyondata.com/


GUIToolkit


http://www.codeproject.com/KB/library/guitoolkit.aspx?display=PrintAll&fid=4311&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=251


Download demo project - 403 Kb
Download full source code- 806 Kb
 


http://www.shengfang.org/blog/p/20080804GUITOOLKITstaticlib.php


http://www.shengfang.org/blog/p/20080804vcinterface.php


上面网址总结了很多东西.


GuiToolkit


GuiToolkit, MFC界面扩展库, 个人作品, 非常棒的类库, 完全free.
官方网站是 http://www.beyondata.com/default.htm
从预编译的二进制例子来看, GuiToolKit已经实现了一个完整而复杂界面的解决方案, 接近于很多商业的库, 如BCGControlBar. 可惜由于个人作品的关系, 几乎没有文档和技术支持(如果有的话, 岂非太完美了).
从得到的完整的源码来看, 在VC6下编译稍需修改一下,
1)头文件需要在VC中被检索到, 所以在VC Option中增加GuitoolKit/SourceCode/Personal/ExtLib/Header
2)原有的工程依赖关系不对,全部去掉即可.
3)import语句#import "Program FilesCommon FilesSystemADOmsado15.dll" 缺少驱动器符指示
4)在GuiFramWnd.h中包含的系统文件AFXIMPL.H路径不对, 将之从系统的MFC/SRC目录拷贝的ExtLib/Header即可.
基本上这样处理后,就可以正确编译大部分的例子代码了.
========

各种界面库介绍及比较

http://blog.csdn.net/pengzp/article/details/6457780


如何选择界面库
Skin
 DirectUI
bcgcontrolbar 
 介绍
Vc 2008 Feature Pack
详细界面库列表见http://home.pacbell.net/atai/guitool/


如何选择界面库
产品易用性
是否容易整合到现有应用程序中?是否容易在新的应用程序项目中应用?
开发人员能否及时掌握并使用
产品稳定性
是否有足够多的示例演示控件库各个方面的功能特性
是否有众多的成功案例
是否一直有持续更新
 界面库高效性
拖拽窗口,观察是否有明显的停顿感。 
可在一个系统下,找一些知名软件比较,如QQ/MSN等。如果有明显差异
拖拽窗口,观察界面控件是否有明显闪烁 。
软件启动速度 。
界面库产品应该对图片等资源加载做优化,以尽可能的减少界面库加载等带来的时间开销。也可以通过比较软件启动速度来比较界面库的效率。
软件色调调整时的效率 。
 
Skin++
商业换肤软件(www.uipower.com)


基于WIN32的界面库,上海勇进公司运作。05年发布第一个版本。去掉了窗口默认的非客户区,导致很window默认的API函数失效。而且一些关键的技术点存在BUG,比如web控件的弹出菜单有BUG。优点:两行代码换肤     缺点:有点慢
1.1 Skin++ 特性
  ◆ 换肤彻底,包括系统对话框、Windows标准控件和第三方控件如BCG;
  ◆ 支持所有Win32/Win64平台,VC/VB/Delphi/C++Builder/VS.NET/PowerBuilder;
  ◆ 使用简单,只需一行代码实现整体换肤;
  ◆ 可视设计,提供皮肤设计工具,可自行设计皮肤,所见即所得的设计开发环境;
  ◆ 色调变换,支持皮肤色调变换,每一套皮肤都拥有N种色调风格;
  ◆ 皮肤资源海量,提供皮肤转换工具,可将主流的皮肤主题转换成Skin++格式;
  ◆ 支持Unicode,提供多种编码格式;
  ◆ 界面与业务逻辑彻底分离; 
  1.2 Skin++ 实现原理
  Skin++属于第二代的外挂式的界面库。
  Skin++ 提供了SkinBuilder 工具将所有控件的资源全部设计成为一个独立的文件,便于在应用程序外部独立地进行增删改操作。
  Skin++ 主要采用Hook与子类化技术来实现应用程序的自动换肤。 
  1.3 Skin++换肤的大致流程
  1、应用程序启动,加载Skin++库;
  2、执行Skin++加载皮肤文件API函数;
  3、Skin++ 安装窗口过程等类型Hook,准备截获应用程序所有窗口的创建事件;
  4、Skin++ 收到窗口创建等消息,根据类名、风格等一些条件来判断是否对该窗口进行子类化;
  5、窗口子类化即可以收到该窗口所有的消息;
  6、根据不同的消息进行相应的处理。如:WM_PAINT消息,Skin++对其进行绘图的操作;
  7、绘图中需要用到图片、文字、字体等资源即根据ID、名称等条件到皮肤文件中去查找;
  8、控件运行过程中,各种界面行为的变化均可通过处理消息与API函数来进行;
  9、控件销毁时,Skin++即对其进行反子类化,将Skin++换肤前的消息过程地址重新设成当前的消息过程;
  10、控件所有的消息不再经过Skin++消息处理函数。控件执行其默认的窗口消息处理函数;
  11、应用程序退出,Skin++库被卸载,在卸载之前Skin++获得通知,Skin++便在内部执行Hook的反初始化与资源文件的清理。
 
 DirectUI
商业界面控件(www.directui.com)


      DirectUI开放式界面开发库,提供平台加插件的开发模式,可以方便的对控件进行扩展。DirectUI支持多种开发语言及平台,比如VC,VB,C#,Delphi,C++Builder,PowerBuilder等等。提供所见即所得的开发工具DirectUI Builder2010,拖拽式界面开发模式,支持


JavaScript脚本控制界面,将逻辑和界面彻底分离, 支持Alpha多图层混合特效,支持多种皮肤对象布局规则,支持多种图片格式资源,例如BMP, PNG, JPG, GIF等等,支持动态换肤,与VS IDE无缝集成。


    同样是上海勇进的产品。据内部人员说是从微软挖一个技术牛人来开发的,内核是借鉴了微软的DUI技术。该界面库个人认为也存在很多问题。比如,他们限制了窗口的WM_SIZE消息,当窗口大小发生变化的时候,会出现虚框,不绘制来提高效率,严重影响用户体验





bcgcontrolbar 
 介绍
商业库,bcg授权了微软在VS 2008中使用BCG的部分控件及功能,但是微软并没有直接将BCG集成进VS 2008中,而是做成单独的扩展资源包,需要单独下载(下载sp1安装)。 


 


BCGControlBar专业版是MFC的一个扩展库,可用来构建类似于Microsoft® Office 2000/XP/2003/2007/2010、Microsoft Visual Studio等知名产品的高级用户界面,例如:日历、网格、编辑和甘特图等。包含了200多个精心设计、测试和具有完备文档的MFC扩展类。


BCGControlBar Library .NET Edition是使用语言C++/CLI(公共语言基础结构)编写的一个工具包,其代码为百分之百的托管代码。使用本产品,需要安装Microsoft .NET Framework 2.0版或者更高版本。
BCGSoft Professional Editor(BCGSoft专业版编辑程序)是一款能让您将高级编辑控制组件合并到任何基于MFC的应用程序的MFC扩展库,提供类似vc编辑器的各种特效功能,如语法加亮功能、色块、Intelli Sense、字符图片支持等。
 
Vc 2008 Feature Pack
2008年01月07日,MS推出了 Visual C++ Feature Pack Beta 下载。这次的Feature Pack 是专门针对VC 库的一个扩充。扩充分为两方面,一方面是MFC 的界面控件库;另一方面是对ISO C++ Standard 2003 的TR1扩充。这个增强包目前只有英文版,其他语言版本要等到


VS2008的SP1了。
部署:
首先需要到微软的下载中心 下载 Visual C++ Feature Pack Beta 下载这个303M的大家伙;


而后,你需要在机器上安装了英文版的Visual Studio 2008,别的语种Feature Pack不支持,完全安装VS2008,就连SQL Sever 2005 Express 和 水晶报表的基本组件也不能少!


如果您是Vista,千万别忘了"Run as Administrator"。HotfixInstaller服务将启动,并安装Feature Pack更新。HotfixInstaller服务有可能没有原因的挂在那里长时间不动(不是Not Responding状态),只要直接在Task Manager中结束掉进程,并重新运行安装包就可以


了。


从下载中心找到了 Visual C++ 2008 Sample Library ,5M,下载,安装。在/Microsoft Visual Studio 9.0/Samples/1033 下找到AllVCLanguageSamples.zip 展开,找到Feature Pack 文件夹,打开里面的工程编译。 一共有34个例子。


在界面方面,集成了BCGSoft的界面控件,现在可以利用VC2008,轻松创建VS2005,Office 2007风格的应用程序界面了。同时,增加了部分控件。


The MFC Feature Pack library supports new features in the following areas:
Menus 
Toolbars 
Panes 
Ribbon Control 
Outlook Alert 
Controls 
Dialog Boxes 
Customization 
Visualization 
Special Features


在C++方面,实现了TR1,有可能在下一个C++标准C++0x中得到体现。主要增加了部分容器和正则表达式。


<array> 
<functional> (TR1) 
<memory> (TR1) 
<random> 
<regex> 
<tuple> 
<type_traits> 
<unordered_map> 
<unordered_set>
<utility> (TR1)


在应用程序向导中选择界面风格,很简单的,我们得到了一个Office 2007风格的MFC程序:


NewControls例子演示了这些控件的具体用法
========

Crypto++ 加/解密算法库

http://blog.csdn.net/suxinpingtao51/article/details/42645193
编译 Crypto++ cryptlib 适合VC6 VC7 VC8 VC9 VC10
Crypto++ Library is a free C++ class library of cryptographic schemes.
可以到下面的网址下载最新源代码:
http://www.cryptopp.com/
 
Crypto++ Library 是开源的、跨平台的C++, 提供丰富的加密解密算法,包括:MD5,IDEA, Triple-DES,AES (Rijndael), RC6, MARS, Twofish, Serpent, RSA, DSA, SHA-1, SHA-2 等等。
 
支持的编译器如下:
  * MSVC 6.0 - 2010
  * GCC 3.3 - 4.5
  * C++Builder 2010
  * Intel C++ Compiler 9 - 11.1
  * Sun Studio 12u1, Express 11/08, Express 06/10
 
==============================
 
这里简单说明一下使用 MSVC2008 对Crypto++进行编译使用的方法和注意事项, 希望对大家开始学习有帮助!
下面一段的英文比较简单, 说明了Crypto++包含的工程情况, 以及使用注意事项, 一看就清楚:
 
On Windows, Crypto++ can be compiled into 3 forms:a static library
including all algorithms, a DLL with only FIPS Approved algorithms, and
a static library with only algorithms not in the DLL.
 
To compile Crypto++ with MSVC, open the "cryptest.dsw" (for MSVC 6 and MSVC .NET
2003) or "cryptest.sln" (for MSVC 2005 - 2010) workspace file and build one or 
more of the following projects:
 
//用于生成包含所有算法的静态库
cryptlib - a static libraryincluding all algorithms
 
//用于生成仅包含FIPS作为标准的算法的dll和导入库
cryptopp - This builds the DLL. Please note that if you wish to use Crypto++
  as a FIPS validated module, you must use a pre-built DLL that has undergone
  the FIPS validation process instead of building your own.
 
//基于dll开发的例子程序
dlltest - This builds a sample application that only uses the DLL.
 
//基于cryptlib静态库开发的测试驱动程序
cryptest Non-DLL-Import Configuration - This builds the full static library
  along with a full test driver.
 
//基于dll 和不包含FIPS算法静态库开发的测试驱动程序
 
cryptest DLL-Import Configuration - This builds a static library containing
  only algorithms not in the DLL, along with a full test driver that uses
  both the DLL and the static library.
 
To use the Crypto++ DLL in your application, #include "dll.h" before including
any other Crypto++ header files, and place the DLL in the same directory as
your .exe file. dll.h includes the line #pragma comment(lib, "cryptopp")
so you don't have to explicitly list the import library in your project
settings.
 
To use a static library form of Crypto++, make the "cryptlib"
project a dependency of your application project, or specify it as
an additional library to link with in your project settings.
In either case you should check the compiler options to
make sure that the library and your application are using the same C++
run-time libraries and calling conventions.
 
名词解释:
FIPS : Federal Information Processing Standards   (美国)联邦信息处理标准 
================================================================
crypto++ Crypto++是一个C++编写的密码学类库,md5 AES DES 所有密码加密的算法都可找到,跨平台
Crypto++是一个C++编写的密码学类库。读过《过河卒》的朋友还记得作者的那个不愿意去微软工作的儿子吗,就是Crypto++的作者Wei Dai。
Crypto++是一个非常强大的密码学库,在密码学界很受欢迎,最初还是Rivest(RSA的R)门下的一个博士姐姐把这个库介绍给我的。虽然网络上可以找到很多密码学相关的代码和库,但是Crypto++有其明显的优点。主要是功能全,统一性好。例如椭圆曲线加密算法和AES在


OpenSSL的crypto库中就还没最终完成,而在Crypto++中就支持的比较好,基本上密码学中需要的主要功能都可以在里面找得到。Crypto++是由标准的C++写成的,学习C++、密码学、网络安全都可以通过阅读Crypto++的源代码得到启发和提高。


Crypto++的安装
首先到http://www.cryptopp.com/上下载最新版本的源代码,如果是windows版的,会得到一个VC的项目,直接用VC打开就可以编译了。这里建议大家使用最新版的C++编译器,因为诸如VC6的编译器是不支持C++的标准的,很多符合C++标准的代码不能编译通过。编译的时


间比较长,完成后会生成cryptlib.lib这个库文件。可以将Crypto++源文件的目录命名为cryptopp,拷贝到编译器的include目录(例如:C:/VS.NET/VC7/include),将cryptlib.lib文件拷贝到编译器的lib目录。这样我们只需要说明链接cryptlib.lib即可。例如在VC7


中在项目->属性->链接器->命令行->附加选项中添加“cryptlib.lib”。


Hello World
现在写一个hello world程序看看能不能编译通过。
#include <iostream>
using namespace std;


#include <cryptopp/aes.h>
using namespace CryptoPP;
int main() 
{
       cout << "hello crypto++" << endl;
       cout << "Aes block size is " << AES::BLOCKSIZE << endl;
 return 0;
}
编译运行,一切OK,哈哈:D,可以用了。 
 
Crypto++首页上提供了Crypto++ User Guide这个入门指南的链接,这本指南属于一定要看的资料,不过可惜的是这也是找到的唯一一本指南了:(。User Guide上面的有一些例子,其中对AES用法的说明不太直接,而AES之类对称加密算法又比较常用,所以我这里写了一


个AES的例子。


例子是直接用AES加密一个块,AES的数据块大小为128位,密钥长度可选择128位、192位或256位。直接用AES加密一个块很少用,因为我们平常都是加密任意长度的数据,需要选择CFB等加密模式。但是直接的块加密是对称加密的基础。


#include <iostream>
using namespace std;
#include <cryptopp/aes.h>
using namespace CryptoPP;
int main()
{
        //AES中使用的固定参数是以类AES中定义的enum数据类型出现的,而不是成员函数或变量
        //因此需要用::符号来索引
        cout << "AES Parameters: " << endl;
        cout << "Algorithm name : " << AES::StaticAlgorithmName() << endl;     
        //Crypto++库中一般用字节数来表示长度,而不是常用的字节数
        cout << "Block size     : " << AES::BLOCKSIZE * 8 << endl;
        cout << "Min key length : " << AES::MIN_KEYLENGTH * 8 << endl;
        cout << "Max key length : " << AES::MAX_KEYLENGTH * 8 << endl;
        //AES中只包含一些固定的数据,而加密解密的功能由AESEncryption和AESDecryption来完成
        //加密过程
        AESEncryption aesEncryptor; //加密器
 
        unsigned char aesKey[AES::DEFAULT_KEYLENGTH];                   //密钥
        unsigned char inBlock[AES::BLOCKSIZE] = "123456789";    //要加密的数据块
        unsigned char outBlock[AES::BLOCKSIZE];                                 //加密后的密文块
        unsigned char xorBlock[AES::BLOCKSIZE];                                 //必须设定为全零
        memset( xorBlock, 0, AES::BLOCKSIZE );                                 //置零
 
        aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH );  //设定加密密钥
        aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密
 
        //以16进制显示加密后的数据
        for( int i=0; i<16; i++ ) {
                cout << hex << (int)outBlock[i] << " ";
        }
        cout << endl;
 
        //解密
        AESDecryption aesDecryptor;
        unsigned char plainText[AES::BLOCKSIZE];
        aesDecryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH );
        aesDecryptor.ProcessAndXorBlock( outBlock, xorBlock, plainText );
 
        for( int i=0; i<16; i++ ) {      cout << plainText[i];    }
        cout << endl;


        return 0;
}


这里面有几个地方要注意一下:
AES并不是一个类,而是类Rijndael的一个typedef。
Rijndael虽然是一个类,但是其用法和namespace很像,本身没有什么成员函数和成员变量,只是在类体里面定义了一系列的类和数据类型(enum),真正能够进行加密解密的AESEncryption和AESDecryption都是定义在这个类内部的类。
AESEncryption和AESDecryption除了可以用SetKey()这个函数设置密钥,在构造函数中也能设置密钥,参数和SetKey()是一样的。
ProcessAndXorBlock()可能会让人比较疑惑,函数名的意思是ProcessBlock and XorBlock,ProcessBlock就是对块进行加密或解密,XorBlock在各种加密模式中有用,这里我们不需要应用模式,因此把用来Xor操作的xorBlock置为0,那么Xor操作就不起作用了。
========
0 0