POCO, (или C++ Portable Components), это коллекция библиотек классов с открытым исходным кодом которая упрощает и ускоряет разработку сетевых мультиплатформенных приложений на C++. Библиотеки хорошо интегрируются со Стандартной Библиотекой C++ (STL) и органично заполняют множество функциональных пробелов в ней. Модульная структура и эффективная реализация делает POCO идеальным кандидатом для использования при разработке для embedded устройств (прошивки и прочее), область, в которой C++ становится все более и более популярным, так как подходит как для низкоуровневой (устройства ввода/вывода, обработчики прерываний и прочее) так и для высокоуровневой объектно-ориентированной разработки. Естественно, POCO подходит и для разработки корпоративных приложений. Сайт проекта: http://pocoproject.org Библиотеки POCO освобождают разработчика от изобретения колеса и позволяют ему тратить время на более стоящие вещи, например разрабатывать быстрее и работать над конкретными особенностями своего приложения отличающие его от прочих.
POCO создан для сетевых мультиплатформенных разработок на C++, как Cocoa от Apple для Mac, или Ruby on Rails для Web разработок - мощная и вместе с тем простая в использовании платформа для построения ваших приложений. POCO построен с жестким соблюдением C++ стандарта ANSI/ISO включающего стандартную библиотеку. Разработчики POCO пытались соблюсти равновесие между использованием сложных механизмов C++ и удержанием классов и кода в понятном и простом состоянии.
POCO запускается на различных платформах, включая:
1) Устанавливаем библиотеку Распаковываем (например в C:/POCO) и прописываем в переменных окружения два пути: POCO_BASE=p:\poco PATH=$(PATH);p\poco\bin 2) Собираем библиотеку: C:\poco\bin\Foundation_vs80.sln и собираем его, получаем c:\poco\bin\PocoFoundationd.dll 3) Открываем примеры, здесь я рассмотрю Logger c:\poco\Foundation\samples\Logger\Logger_vs80.vcproj ------------- Logger.cpp -------------
using Poco::Logger; using Poco::PatternFormatter; using Poco::FormattingChannel; using Poco::ConsoleChannel; using Poco::FileChannel; using Poco::Message; int main(int argc, char** argv) { // set up two channel chains - one to the // console and the other one to a log file. FormattingChannel* pFCConsole = new FormattingChannel(new PatternFormatter("%s: %p: %t")); pFCConsole->setChannel(new ConsoleChannel); pFCConsole->open(); FormattingChannel* pFCFile = new FormattingChannel(new PatternFormatter("%Y-%m-%d %H:%M:%S.%c %N [ %P ] : %s:%q:%t")); pFCFile->setChannel(new FileChannel("sample.log")); pFCFile->open(); // create two Logger objects - one for // each channel chain. Logger& consoleLogger = Logger::create("ConsoleLogger", pFCConsole, Message::PRIO_INFORMATION); Logger& fileLogger = Logger::create("FileLogger", pFCFile, Message::PRIO_WARNING); // log some messages consoleLogger.error("An error message"); fileLogger.error("An error message"); consoleLogger.warning("A warning message"); fileLogger.error("A warning message"); consoleLogger.information("An information message"); fileLogger.information("An information message"); Logger::get("ConsoleLogger").error("Another error message"); return 0; }
Результат работы (в файле sample.org)
2007-10-11 10:12:19.8 WKS-323[1204]:FileLogger:E:An error message
2007-10-11 10:12:19.9 WKS-323[1204]:FileLogger:E:A warning message
2007-10-11 10:12:23.5 WKS-323[312]:FileLogger:E:An error message
2007-10-11 10:12:23.6 WKS-323[312]:FileLogger:E:A warning message
Andrew.Selivanov (at) gmail.com для http://www.crossplatform.ru
Материалы статьи разрешается использовать в соответствии с лицензией GNU FDL