没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
POCO C++ 学习
文章来源:http://blog.sina.com.cn/beijingwwn
作者和出处 http://blog.csdn.net/arau_sh/article/details/8568654)
POCO C++library:http://pocoproject.org/
POCO 的文档: http://poco.sourcearchive.com/
<POCOC++库导游>:http://hi.baidu.com/marsjin/item/1b0d86bb9f2e61f162388e30
<POCOC++简介>: http://blog.sina.com.cn/s/blog_68ce7fc30100v3mt.html
简介
POCO C++是一个开源的 C++类库的集合,它主要提供简单的、快速的网络和可移植应用程
序的 C++开发,这个类库和 C++标准库可以很好的集成并填补 C++标准库的功能空缺。
POCO 库的模块化、高效的设计及实现使得 POCO 特别适合嵌入式开发。在嵌入式开发领
域,由于 C++既适合底层(设备 I/O、中断处理等)和高层面向对象开发,越来越流行。
当然 POCO 也准备好了面对企业级挑战。
POCO C++包含四个核心库和一些附加库。核心库包括 Foundation,XML,Util 和 Net,
还有两个附加库,一个是 NetSSL,主要在 Net 库中网络类中提供 SSL 支持;一个是 Date
库,在不同的 SQL 库中提供统一的接口访问。POCO C++以网络中心的跨平台 C++软件
开发为目标,就像苹果的 Cocoa 之于 Mac 开发, 或 Ruby on Rails 之于 Web 开发—样
强大而不失简单并有趣的用于创建应用平台。POCO C++严格使用标准的 ANSI/ISO C++,
包含标准库。程序库的贡献者试图在使用 C++高级特性、易于理解的类、干净的代码、连
续及易于维护间得到平衡.
Foundation 库
Foundation 库是 POCO C++的核心库。包含了底层平台的抽象层,还有经常使用的
实用类和函数。包含了固定大小的整数类型,提供整型与字节转换的函数。 Poco::Any 类
(基于 boost::Any),统一的错误处理及调试工具,包含各种异常类和支持断言功能,同时
还包含一些内存管理类,基于引用计数的智能指针,和用于 buffer 管理及内存池的类。对
于字符串的处理,POCO 包含一些函数和其他的东西, 串 trim 操作, 大小写敏感的比较和
大小写转换. 以类对 Unicode 的基本支持:转换文本的不同编码, 包括 UTF-8 和 UTF-16.
支持格式化和解析数字, 包括 sprintf 的类型安全变量. 还提供了基于著名的 PCRE 库
(http://www.pcre.org)的正则表达式。
POCO 提供多种变量的日期和时间的处理类。在访问文件系统方面, POCO 拥有
Poco::File 、 Poco::Path 类, 和 Poco::DirectoryIterator 类.在许多应用程序中,其中一部分
需要通知其他部分自己这边发生的事情. POCO 中的 Poco::NotificationCenter、
Poco::NotificationQueue 和 events (类似 C# events) 使这种工作变得容易. 下面的示例显示
如何使用 POCO 的 events. 示例中, 类 Source 的公共 event 命名为 theEvent,该 event 有一个
int 型参数. 用户可调用操作符 +=订阅改事件和调用-=操作符取消订阅, 同时传递对象指针
和成员函数指针.事件可通过调用()操作符发射, 见 Source::fireEvent().
POCO 中的 stream 类已经提到过. stream 作为 Poco::BinaryReader 和
Poco::BinaryWriter 的参数用于写二进制数据到流中, 自动、透明地处理字节顺序问题.
在复杂的多线程应用中,查找问题和 bug 的仅有方式就是编写广泛的日志信息. POCO 提
供强大可扩展的日志框架,该框架支持过滤、路由到不同的通道以及格式化日志信息. 日志
消息可以写入 console、文件、Windows 事件日志、Unix 的 syslog 后台或网络中.如果 POCO
提供的通道不够使用,可以很方便的使用新类扩展日志框架.对于在运行时装载(及卸载) 共
享库, POCO 提供底层的 Poco::SharedLibrary 类. 基于它的 Poco:: classLoader 类模板和支持
框架, 允许在运行时动态装载和卸载 C++类, 类似于 JAVA 和.NET. 类装载框架使得以平台
无关的方式编写应用程序插件成为小菜一碟。
最后, POCO Foundation 包含在不同级别上的多线程封装. 从 Poco::Thread 类和一般同
步原子(Poco::Mutex, Poco::ScopedLock, Poco::Event, Poco::Semaphore, Poco::RWLock),
Poco::ThreadPool 类及支持 thread-local 存储, 到高级别的活动对象(active object)的封装.
简单点儿说, 活动对象(active object)是拥有运行于自有线程中的方法的类. 这使得异步成
员函数调用成为可能— 调用成员函数, 在函数执行期间, 做一堆其他的事情, 然后获得函
数的返回值. 下面的示例展示在 POCO 中是如何做的. ActiveAdder 类定义一个活动方法
add(), 由 addImpl()成员函数实现. 在 main()中调用活动方法产生 Poco::ActiveResult (also
known as a future), 最后获得函数的返回值。
The XML 库
POCO XML 库支持读取, 处理及写 XML. 遵循 POCO 的一个指导原则— 不要试图重新
发明已经存在的工作— POCO's XML 库支持工业标准 SAX (版本 2) 及 DOM 接口, 很多有
XML 经验的开发人员对此比较熟悉. SAX,XML 的简单 API (http://www.saxproject.org), 定义
了基于事件的 XML 读接口. 基于 SAX 的 XML 解析器在读取 XML 文档时但它读到一个元
素时会通知应用程序, 字符数据, 或其他人为定义的 XML 元素. SAX 解析器不需要将整个
XML 文档装载到内存中, 因此它可用于高效测解析巨大的 XML 文件. 相反, DOM (文档对
象模型, http://www.w3.org/DOM/) 让应用程序访问整个 XML 文档, 使用树形的对象层级.
要达到此目的,POCO 提供的 DOM 解析器需要将整个文档装载到内存. 为减小 DOM 文档
的内存占用量, POCO DOM 实现使用使用字符串 spooling,经常使用的字符串如元素和属性
名仅存储一次. XML 库基于 Expat 开源 XML 解析器库 (http://www.libexpat.org). 基于
Expat 的是 SAX 接口, 基于 SAX 接口的是DOM的实现. 对字符串, XML 库使用 std::string,
UTF-8 编码. 这是的 XML 库与应用程序其他部分的接口变得简单. 在未来的版本中将提供
对 XPath 和 XSLT 的支持。
Util 库
Util 库的名称可能会给人一些误导, 因为它包含了创建命令行和服务器应用的框架. 包括
命令行参数处理支持(校验, 绑定到配置属性, etc.) 及管理配置信息. 支持不同的配置文件
格式— Windows 形式的 INI 文件, Java-类型的属性文件, XML 文件及 Windows 注册表.
对服务器应用程序,框架提供对 Windows服务和 Unix 后台的透明支持. 每个服务器应用可以
注册以 Windows 服务运行, 不需要额外的代码.当然, 所有的服务器应用程序仍然可以按命
令行方式运行, 这使得测试和调测容易.
Net 库
POCO's Net 库使得编写基于网络的应用容易. 不管是应用是简单的通过纯 TCP socket 发送
数据还是需要完整的内建 HTTP server 的应用,都可以在 Net 库中找到有用的东西。
在最底层, Net 库包含 socket 类, 支持 TCP 流和 server sockets, UDP sockets, multicast sockets,
ICMP 及 raw sockets. 如果需要安全 sockets, NetSSL 库提供支持, 实现使用了 OpenSSL
(http://www.openssl.org). 基于 socket 类提供两个框架创建 TCP 服务器 — 一个是多线程服
务器(每个连接一个线程, 从线程池获得), 一个是基于 Acceptor-Reactor 模式的服务器. 多线
程 Poco::Net::TCPServer 类及其支持框架也是 POCO's HTTP server 实现的基础. 在客户端,
Net 库提供类与 HTTP servers 通信, 要使用 ftp 协议发送和接收文件, 使用 SMTP 发送邮件消
息 (包括附件) 和从 POP3 server 接收邮件。
1. 跨平台库的生成
这一节主要讲一下,如何在 window 上生成一个类似于 POCO 动态库,以及 POCO 跨
平台头文件的结构。
POCO C++ Basic Edition 版本,工程由四部分联合而成,分别是 Foundation,Net,
Util,Xml。
其中每个部分都是跨平台结构,VC 下编译采用没有预编译头文件的形式,为了做
到跨平台,每个工程都有自己的输出定义文件,分别是“Foundation.h”,“Net.h”,“Util.h”
和“Xml.h”,各工程的任何头文件基本上都会包括其对应的头文件,来控制输出。
1. 跨平台库的生成
在 Poco 库中所有的 Dll 都是没有资源、没有 stdafx.h 、stdafx.cpp 没有 dllmain 存
在的工程。如何生成这样的工程和理解生成这样的工程 Vs 所做的工作都有一定意义。
a) 建立 win32 console Application
b) 选取静态库,不勾选”预编译头文件”
c) 在”工程”->”Properties”->”General”->”Configuration Type”中选
择”DynamicLibrary(.dll)”。来控制生成 dll 还是 lib
d) 在添加文件后,自然会有”C/C++”选项;在修改成为”DLL”类型后,自然会有”
Link”选项
e) 如果是 DLL,在”工
程”->”Properties”->”C/C++”->”Preprocessor”->”PreprocessorDefinitions”中,把”_LIB”定
义换成” _USRDLL”
2. 跨平台的头文件定义
这个层次应该先了解一下编译之前系统或编译器已经为我们提供了什么,
编译器的预编译宏。其中分类如下:
⑴ 编译器制定平台类型, 如” _WIN32”、” _WIN64”、” __FreeBSD__”、” unix”。
⑵ 编译器制定的平台硬件类型,如”__x86_64__”、” __IA64__”、”__arm__”。
⑶ 某个编译器下编译类型的定义,如”_DLL” 、“_DEBUG” 、 ” _MSC_VER” 、”
_WINDLL” 、” _USRDLL” 、” _AFXDLL”等。
⑷ 通用的编译宏定义,如"__DATE__"、"__FILE__"、"__LINE__"
因此我们的头文件定义应在了解编译器提供的预处理宏后,定义。一般会包括了以
下几个部分:
剩余374页未读,继续阅读
资源评论
joneson118
- 粉丝: 9
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功