Игорь Бондарев
Далее на странице несколько примеров конца 2022 года. Еще ниже я размещал когда-то примеры кода конца 20 и начала 21 века. Есть принципиальная разница между этими примерами, которые разделяет четверть века. Когда еще не появился даже google, поиск информации представлял собою весьма медленный и не всегда простой процесс, несмотря на то, что интернет был куда более компактным. Как и многие другие разработчики, я делился "примерами", которые были сильно модифицированными кусками кода, буквально вырезанного из уже работающих программ. Эти примеры предназначались для тех, кто хотел бы сократить время разработки, адаптируя для своих нужд уже готовые решения. Потом я забросил это занятие, перейдя в "управленцы", но старался сохранить навыки разработчика (хотя бы потому, что это полезно для мозга, не говоря уже о том, что "управленец" просто обязан понимать процесс производства). Примеры конца 2022 года я сделал, разбираясь в популярных на данный момент библиотеках, СУБД и прочем, что может потребоваться для решения распространенных прикладных задач. Они сделаны в Visual Studio под Windows, но с учетом того, что все написанное может быть с минимальными трудозатратами перенесено на другие платформы. Поскольку в России сейчас определен список рекомендованных ОС (например, Astra Linux или Alt Linux), прежде всего я обратил внимание на то, что используют крупные ИТ компании, вроде , как, например, 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#, но и в С++ реализация будет очень похожа.
MyAddin1.zip Только Source (C#).
Requirements: Visual Studio 2005, Visual Studio 2005 SDK

 

NetValidatePasswordPolicy.
Пример использования функции NetValidatePasswordPolicy (Windows Server 2003 и выше) для проверки соответствия пароля текущей "политике".
NetValidatePasswordPolicy.zip Только Source.
Requirements: WTL 7.x.

 

Scheduled Tasks.
Загрузка задачи и ее свойств по имени, создание новой задачи с использованием ITaskScheduler, ITaskTrigger etc.
Scheduler.zip Только Source.
Requirements: WTL 7.x.

 

Импорт и экспорт MS Excel в/из MS SQL 2000.
Загрузка данных из таблиц Excel, хостинг WebBrowser control, отправка почты с attachments, выгрузка данных в Excel, форматирование, настройки, интерфейс в стиле Office XP.
Excel.zip Source, пример БД (scripts).
Requirements: WTL 7.x, Office 2003, MS SQL 2000

 

Пример c полем типа image MS SQL 2000.
Диалог, в котором можно задать имя файла, загрузить содержимое файла, выгрузить и посмотреть результат(текст).
TestBlobDB.zip Только source.
Requirements: WTL 7.x

 

Пример использования IFilter для получения текста документов.
Диалог, в котором можно задать имя файла (doc, pdf, html etc.) и с помощью IFilter получить текст. Нужный для каждого типа файлов фильтр должен быть установлен в системе. К примеру, фильтр для pdf можно скачать на www.adobe.com
TestPDFFilter.zip Только source. Для Windows2000 и выше.
Requirements: WTL 7.x

 

Примеры оберток ActiveX.
Два ActiveX контрола, которые являются оберткой для других ActiveX. AxWebBrowser.zip предназначен для показа в "окне на странице" браузера IE или Mozilla с возможностью получить текущий или задать новый URL. Работа с Events содержится в TSIasGisExtCover.zip. AxComputerInfo.zip выводит некоторую системную информацию.
TSIasGisExtCover.zip Только source. IConnectionPoint, IDispEvent etc.
AxComputerInfo.zip Включает source, пример использования на странице и deployment.
AxWebBrowser.zip Включает source, пример использования на странице и deployment.



 Процесс и поток.
Dll с единственной функцией, которая получает два параметра: имя процесса и код клавиши, а потом находит процесс и отправляет его потоку сообщение.
MsgToProcessTHAPI.zip Реализация через ToolHelp (не работает в NT 4).
MsgToProcessUndocumented(NTx).zip Недокументированные функции (работает в NT 4).
MsgToProcessTest.zip Пример использования MsgToProcess.dll
TestCharMsg.zip Тест процесса, получающего сообщения.


Ожидание завершения процесса.
Консольное приложение. Ищет процесс, а потом ждет его завершения. (Было сделано, что бы запускать процесс в случае его падения).
WaitProcessTHAPI.zip Реализация через ToolHelp.


 Extended Stored Procedure для SQL Server.
Процедура получает параметрами адрес (или имя) и порт хоста, и текст сообщения. Соединяется и отправляет сообщение. (Есть таймаут для соединения).
TCPExtStoredProc.zip Реализовано через WinSock.


Приложение для Pocket PC,
делающее перезагрузку (
SoftReset). С релизом для ARM.
SoftReset.zip Работает под WinCE 3, 4. Есть GUI (с одной кнопкой:)).
Requirements: embeded VC++ 4.


Библиотека компонент для WTL.
Собрана в разное время из исходников Daniel Bowen, Bjarke Viksøe, Sergey Klimov. Я не помню, что было изменено и добавлено мной, поэтому смешивать с оригинальными версиями перечисленных авторов не стоит. Руководства по использованию нет. Последняя версия предназначена для использования с WTL 7.х.
VC7SRC.zip Screenshots: SDI Tabbed, Tabbed & Docking, AutoHide, Colored Syntax, Dialog, TryIcon
Requirements: WTL 7.x


 Отправка письма из консоли.
В качестве аргументов задаются сервер, порт, user, password, отправитель, адрес отправителя, адрес получателя, тема, сообщение. Включает релиз и полный набор для реализации отправки писем с attachments, cc и тд.
SMTPSenderCon.zip Реализовано через WinSock.

 

© Игорь Бондарев