Далее на странице несколько примеров конца 2022 года. Еще ниже я размещал когда-то примеры кода конца 20 и начала 21 века. Есть принципиальная разница между этими примерами,
которые разделяет четверть века. Когда еще не появился даже google, поиск информации
представлял собою весьма медленный и не всегда простой процесс, несмотря на то,
что интернет был куда более компактным. Как и многие другие разработчики, я делился "примерами", которые были сильно модифицированными кусками кода, буквально вырезанного
из уже работающих программ. Эти примеры предназначались для тех, кто хотел бы сократить время разработки, адаптируя для своих нужд уже готовые решения.
Потом я забросил это занятие, перейдя в "управленцы", но старался сохранить навыки разработчика (хотя бы потому, что это полезно для мозга, не говоря уже о том,
что "управленец" просто обязан понимать процесс производства). Примеры конца 2022 года я сделал, разбираясь в популярных на данный момент библиотеках,
СУБД и прочем, что может потребоваться для решения распространенных
прикладных задач. Они сделаны
в Visual Studio под Windows, но с учетом того, что все
написанное может быть с минимальными трудозатратами перенесено на другие платформы. Поскольку в России
сейчас определен список рекомендованных ОС (например, Astra Linux
или Alt Linux), прежде всего я обратил внимание на то, что используют крупные ИТ компании, вроде 1С, как, например,
wxWidgets или PostgreSQL. QT показалась мне интересной, но очень большой, платной и довольно специфичной.
MongoDB интересна,
как пример докуметоориентированной NoSQL СУБД, а без встраиваемых СУБД типа SQLite трудно обойтись при написании определенного рода ПО.
Интересным мне показался и Redis. Если в прошлом я бы выбрал WinHttp для native, то сейчас просто необходимо использовать кроссплатформенные и открытые решения,
вроде libcurl. Отдельное внимание я решил уделить Web, но как и в случае с native не разрабатывал полноценные приложения.
Примеры служат только для того, чтобы понять и записать для себя, как все устроено, и как быстро начать разработку при необходимости
|
В настройках всех проектов для x64 (Debug, Release) задан ISO C++20 Standard. Настройки для Win32 не заданы за ненадобностью Win32. Статическую сборку я
предпочитаю потому, что зависимость от внешних библиотек иногда создает проблемы из-за отсутствия этих библиотек в системе.
С PostgreSQL сделать один исполняемый файл не удалось, но об этом ниже (PGSqlSmp)
|
C++, native, PostgreSQL, Libpqxx |
|
PGSqlSmp.zip
GitHub
Visual Studio 2019, PostgreSQL 15, CMake 3.25 |
Я хотел обойтись без использования odbc, oledb, jdbc и т.п. для работы с PostgreSQL, поэтому выбрал
libpqxx
(the official C++ client API for PostgreSQL). Нужно загрузить с Github
и собрать последнюю версию libpqxx. CMake и Visual Studio нужно запускать от имени администратора. В случае ошибки CMake при создании конфигурации нужно перед
find_package(PostgreSQL REQUIRED) в файле \cmake\config.cmake указать версию установленного PostgreSQL. В
моем случае 15: set(PostgreSQL_ADDITIONAL_VERSIONS "15").
Переменная окружения PQXX в настройках проекта указывает на
расположение файлов библиотеки. Pqxx.lib позволяет обойтись без драйверов odbc и прочего, но не позволяет собрать полностью автономный клиент простым способом. Такое возможно, если возникнет крайняя необходимость,
но потребует выполнить статическую сборку всех библиотек, используемых PostgreSQL,
а это займет слишком много времени, поэтому я пропустил этот шаг в своем небольшом эксперименте |
|
|
C++, native, SQLite |
|
SQLIteSmp.zip
GitHub
Visual Studio 2019
|
Желательно скачать последнюю версию (в примере используется Version 3.40.0)
с сайта SQLIte и добавить файлы (.h, .c) в проект
|
|
|
C++, native, LibCurl |
|
LibCurlSmp.zip
GitHub
Visual Studio 2019, CMake 3.25
|
Скачать исходники можно с официального сайта Libcurl или
Github. В примере я использовал версию 7.86.0.
С помощью CMake нужно сконфигурировать и сгенерировать файлы проектов, после чего выполнить сборку в Visual Studio. Переменная окружения LIBCURL в настройках проекта LibCurlSmp
указывает на расположение файлов библиотеки |
|
|
C++, native, MongoDB C Driver |
|
MongoSmp.zip
GitHub
Visual Studio 2019, CMake 3.25, MongoDB Community 6.0.3
|
Мне приходилось работать с нереляционными СУБД (Caché, например),
но опыта работы с MongoDB у меня не было, поэтому я установил версию Community
и использовал для изучения MongoDB Compass. В С++ приложении можно использовать как mongocxx, так и
MongoDB C Driver, но для mongocxx все равно нужен MongoDB C, поэтому я остановился на нем. К нему есть
документация и примеры. В своем примере я использовал версию 1.23.1. Как и в других примерах
нужно загрузить последнюю версию, с помощью CMake сконфигурировать и сгенерировать файлы проектов, после чего выполнить сборку в Visual Studio.
Переменная окружения LIBMONGOC в настройках проекта указывает на расположение файлов библиотеки |
|
|
C++, native, wxWidgets |
|
wxClient.zip
GitHub
Visual Studio 2019, CMake 3.25
|
Я уже писал выше, что мне понравилась QT, но при необходимости разработать GUI приложение я отдам предпочтение
wxWidgets. Как обычно до написания приложения нужно загрузить
последнюю версию
(я использовал 3.2.1), с помощью CMake сконфигурировать и сгенерировать файлы проектов, после чего выполнить сборку в Visual Studio.
Переменная окружения WXWIN в настройках проекта указывает на расположение файлов библиотеки. Я включил в проект Libcurl, чтобы загрузить и отобразить страницу и ее код.
Для отображения страницы используется wxHtmlWindow, но для полноценной работы с web лучше использовать wxWebView.
Вид приложения |
|
|
C++, native, OpenCV |
|
OpenCVSmp.zip
GitHub
Visual Studio 2022
|
Распознавание лиц с помощью
OpenCV. Нужно скачать последнюю версию по ссылке с сайта или
с GitHub.
В этом примере версия 4.6.0. При загрузке с GitHub потребуется использовать CMake и самостоятельно выполнить сборку. В обоих случаях нужно добавить путь
к статическим или динамическим библиотекам в переменную среды Path. Переменная среды OPENCV в файле проекта указывает на папку build библиотеки.
Для распознавания используется картинка, на которой только
одно настоящее лицо, и видео с камеры. Я использовал несколько вариантов каскада Хаара. Лучший результат получился при использовании haarcascade_frontalface_default.xml.
Остальные закомментированы.
Результат распознавания картинки. Результаты можно улучшить, но это не было целью написания
данного примера |
|
|
C++, native, Redis/hiredis |
|
RedisSmp.zip
GitHub
Visual Studio 2022
|
Пример использования минималистичного клиента
hiredis для работы с
Redis. Нужно скачать последнюю версию с
GitHub.
В этом примере версия 1.1.0. После загрузки выполнить сборку. К Redis не совсем подходит аббревиатура СУБД. Это скорее система управления данными, представленными в виде множеств,
списков, хэшей и т.д.
|
|
|
|
WEB |
|
|
ASP.NET Core, C#, MongoDB |
|
CoreMongoWebApi.zip
GitHub
Visual Studio 2022, MongoDB Community 6.0.3
|
Очень простое приложение, в котором я проверил, как на C# и ASP.NET подключаться к БД, создавать, изменять, удалять и запрашивать документы.
Есть куски кода для загрузки небольших файлов и файлов, для которых нужно использовать GridFS (DocumentsServices.cs). Я использовал для загрузки файлов как массив байт
с кастомизированной сериализацией JSON, так и запись контента в строку, и закомментировал тот код, который был предпоследним (Documents.cs)
|
|
|
|
Конец 20 и начало 21 века
Кое-какие исходные тексты программ
лежат в этом разделе. Я часто использую
собственный код повторно, но не всегда
он есть у меня под рукой. Вот по этой
причине я и сделал эту страничку, на
которой будут простые, но
иногда полезные примеры. Впрочем,
несмотря на бесполезность каких-то
крупных проектов, сделанных под очень
специфические запросы заказчика, они
тоже могут пригодиться. Их размещение
здесь - вопрос времени. Свободного
времени:). Основные источники информации
MSDN,
RSDN,
The Code Project.
Интересные примеры есть
у
Alex Fedotov
и
Sysinternals
Freeware. Все не перечислить,
но всякий раз, когда мне нужно что-то
сделать, я смотрю, не делал ли раньше
кто-то что-нибудь подобное. Все примеры
с этой страницы предназначены для
компиляции в
Visual C++.NET 2003 (VC++
7.1).
Я указываю
дополнительные требования или другую
среду для примера в случае, если это
требуется. |
IVsRegisterPriorityCommandTarget.
Пример использования
IVsRegisterPriorityCommandTarget
при написании
Add-ins для
переназначения статуса и
исполнения команд VS 2005
(2003).
Класс SlnCmdTarget
наследуется
от IOleCommandTarget и позволяет
в методе Exec выполнить
собственный код для нужной
команды, а в методе QueryStatus
изменить статус команд (INVISIBLE,
SUPPORTED, ENABLED).
Пример написан
на C#, но
и в С++ реализация будет очень
похожа.
Requirements:
Visual Studio 2005,
Visual Studio 2005
SDK |
NetValidatePasswordPolicy.
Пример использования функции
NetValidatePasswordPolicy
(Windows Server 2003
и выше)
для проверки соответствия пароля
текущей "политике".
Requirements:
WTL 7.x. |
Scheduled Tasks.
Загрузка задачи и ее свойств по
имени,
создание новой задачи с
использованием ITaskScheduler,
ITaskTrigger
etc.
Requirements:
WTL 7.x. |
Импорт и экспорт MS Excel
в/из MS SQL 2000.
Загрузка данных из таблиц
Excel, хостинг
WebBrowser
control,
отправка почты с
attachments,
выгрузка данных в Excel,
форматирование, настройки,
интерфейс в стиле Office
XP.
Requirements:
WTL 7.x,
Office 2003, MS SQL 2000 |
Пример c полем
типа image MS SQL 2000.
Диалог, в
котором можно задать имя файла,
загрузить содержимое файла,
выгрузить и посмотреть
результат(текст).
Requirements:
WTL 7.x |
Пример использования IFilter
для получения
текста документов.
Диалог, в
котором можно задать имя файла
(doc, pdf, html etc.)
и с помощью
IFilter получить
текст. Нужный для каждого типа
файлов фильтр должен быть
установлен в системе. К примеру,
фильтр для pdf
можно скачать на
www.adobe.com
Requirements:
WTL 7.x |
Примеры оберток ActiveX.
Два ActiveX
контрола, которые
являются оберткой для других
ActiveX. AxWebBrowser.zip
предназначен для показа в "окне на
странице" браузера IE
или Mozilla
с возможностью получить текущий или
задать новый URL.
Работа с Events
содержится в TSIasGisExtCover.zip.
AxComputerInfo.zip
выводит
некоторую системную информацию.
|
Процесс и поток.
Dll
с
единственной функцией, которая получает
два параметра: имя процесса и код
клавиши, а потом находит процесс и
отправляет его потоку сообщение.
Ожидание завершения
процесса.
Консольное приложение. Ищет
процесс, а потом ждет его завершения.
(Было сделано, что бы запускать процесс
в случае его падения).
Extended Stored
Procedure для SQL
Server.
Процедура
получает параметрами адрес (или имя) и
порт хоста, и текст сообщения.
Соединяется и отправляет сообщение.
(Есть таймаут для
соединения).
Приложение для
Pocket PC,
делающее перезагрузку (SoftReset).
С релизом для
ARM.
|
SoftReset.zip |
Работает под
WinCE 3,
4. Есть
GUI (с
одной кнопкой:)). |
Requirements: embeded VC++ 4.
Библиотека компонент для
WTL.
Собрана в разное время
из исходников
Daniel
Bowen,
Bjarke
Viksøe,
Sergey
Klimov. Я не
помню, что было изменено и
добавлено мной, поэтому
смешивать с оригинальными
версиями перечисленных авторов
не стоит. Руководства по
использованию нет. Последняя
версия предназначена для
использования с
WTL 7.х.
Requirements:
WTL 7.x
Отправка
письма из консоли.
В качестве
аргументов задаются сервер,
порт,
user, password, отправитель,
адрес
отправителя, адрес получателя,
тема, сообщение.
Включает релиз и
полный набор для реализации
отправки писем с
attachments, cc
и тд.
|
|
|
|