О важности префикса «\\\\?\\\\»

В одном из своих прошлых постов я писал о получении списка доступных COM портов на основе информации в реестре. Порты там представлены в виде строк «COM1», «COM2» и т.д. В принципе ничто не мешает передавать их в таком виде в функцию CreateFile для открытия. Однако для большей надежности я советую добавлять к ним префикс «\\\\?\\\\». Зачем? Читать полностью →

Функции printf, wprintf и _tprintf

В языке C/C++ существует два типа символов: обычный char и широкий wchar_t. Для каждого из них предусмотрена своя версия функции форматированного вывода. Для char это printf, а для wchar_twprintf. Но со временем понадобился третий вариант этой функции. Читать полностью →

Получение списка доступных COM портов

При программировании COM портов полезно иметь возможность получать список доступных портов на компьютере. Эта задача встречается настолько часто, что я решил затронуть ее в своем блоге. Читать полностью →

Ошибка 0xC000007B и смешение кода

Сравнительно недавно я работал над одной небольшой программой. Она была предельно простой (проверяла работу функции в подгружаемой библиотеке). Программа нормально компилировалась (даже без предупреждений), но при ее запуске выдавалось сообщение об ошибке 0xC000007B. Читать полностью →

Delphi неправильно передает пустые строки в технологии COM

Работая над одной программой, я заметил ошибку. Первоначально я решил, что это ошибка сервера, но, переписав пример на другой язык программирования, я понял, что сервер тут ни при чем. Читать полностью →

Полемика о времени жизни объекта

В своей предыдущей статье я представил алгоритм использования функции PulseEvent в качестве спускового крючка. Такой подход предполагает, что исполнительный поток создается во время старта программы и уничтожается только тогда, когда основная программа завершает свою работу. С таким подходом могут не все согласиться. Читать полностью →

Функция PulseEvent в роли спускового крючка

Функция PulseEvent предназначена для кратковременного перевода объекта событие в свободное состояние с его последующим возвратом в занятое состояние. Обычно в литературе по Windows API ей уделяется мало внимания. Тем не менее, её можно использовать в качестве спускового крючка при управлении потоком. О том, как это сделать, я сегодня и расскажу. Читать полностью →

«Fatal: Expected file name» простое решение этой проблемы

Все, кто работал с C++ Builder, наверняка сталкивались с этой проблемой. Когда при компиляции программы выдается ошибка с текстом: «[Linker Fatal Error] Fatal: Expected a file name:». Всё, никакой дополнительной информации нет. Только эта строка. В результате чего пользователи вынуждены гадать: что делать и куда копать.

На самом деле в большинстве случаев эта проблема решается очень просто.

Читать полностью →

Проблема с отображением содержимого chm файла и ее решение

Сегодня обнаружил, что современные версии операционной системы Windows (начиная с Windows Vista) в целях нашей с вами защиты не отображают содержимое chm файлов, скачанных из Интернета. К счастью эту особенность поведения легко поправить.

Читать полностью →