Ответы пользователя по тегу C++
  • Как совместить Qt5 и WinUSB?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Как советует MSDN,
    Start with the WinUsb Application template included with Microsoft Visual Studio (Ultimate or Professional)

    На самом деле там ошибка, примеры лежат в последних версиях DDK, а не в самом MSVS.
    https://code.msdn.microsoft.com/windowshardware/wi...
    Критерий успеха -- успешная сборка упомянутого примера из DDK.

    Насколько быстро и просто будет завести это все c QT, я не знаю.
    Если нужно быстро, просто и без приколов, то я бы сразу реализовывал это все на майкрософтовском стеке целиком (.NET + WinUsbNet = это .NET биндинги для winusb).
    Ответ написан
    Комментировать
  • Как лучше организовать сканирование?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    1) Приличные вендоры честным клиентам обычно высылают даже старые версии купленного ими ПО. Напишите письмо в саппорт, а тем временем пробуйте иные варианты.
    2) Как уже ответили выше, просто сканирование через TWAIN можно завести буквально скопировав пример кода из сети.
    Ответ написан
    2 комментария
  • Какие есть примеры многопоточного GUI-приложения с MFC?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    А что именно Вы хотите увидеть в таком примере?
    Нет ведь никакой особой специфики: MFC -- это просто плюсовая обертка над WinAPI, лишней сериализации и потокобезопасности они не добавляли где попало (ибо накладные расходы). Большинство способов подергать за усы UI-объекты являются обертками над PostMessage/SendMessage/... , которые сериализованы либо не сериализованы точно так же, как и нижележащие функции WinAPI, просто пробуем и курим MSDN.
    Для синхронизации вообще в MFC опять же сделаны просто обертки над WinAPI.

    Примеры можно найти хоть на CodeProject: codeproject mfc threading
    Ответ написан
    Комментировать
  • Как закрыть TCP-порта (сканер портов) / Qt ?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Мне кажется, Вы путаете локальные сокеты, которыми Вы управляете, и удаленные порты на другом хосте (другой машине). На другой машине их закрыть может только ПО на той самой машине, а Вы на своей -- нет.
    Ответ написан
  • Как в Windows работать в netbeans с boost?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    1) А зачем Вы сразу собираете boost из сырцов?
    Возьмите его прекомпилированные бинарники для mingw и заголовки для начала, соберите пару примеров. Откуда их брать -- Вам намекает вывод упавшего скрипта.
    Компилировать boost без понимания, зачем это надо -- просто потеря времени.

    2) Под виндой boost собирается относительно беспроблемно только под Visual Studio.
    Если Вы используете mingw без опыта, будьте готовы к спецэффектам и пляскам с бубном. А netbeans тут в общем-то и ни при чем.
    Если хотите собирать под mingw что-нибудь серьезное, сначала поймите как тулчейн вообще работает -- какие переменные окружения надо прописывать, куда что класть, что надо сделать, чтобы всегда работал mingw32-make, и так далее.
    Ответ написан
    Комментировать
  • Странное поведение массивов в Си

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Массив как переменная в C — это псевдоним адреса в памяти, по которому лежит его первый элемент.
    Массива ни в машинном коде, ни в памяти, строго говоря, не существует. Существует только его «содержимое» — его элементы.
    При обращении к элементу массива действия производятся машиной прямо над его содержимым по вычисленному адресу.
    Самого массива — не существует.
    Всякий раз, когда в С Вы работаете с массивом — компилятор использует или указатель на первый элемент массива (например, когда Вы передаете массив в функцию), или адрес первого элемента массива, а машина далее с этим работает.

    Указатель в C — это переменная, содержащая адрес в памяти.
    Указатель в машинном коде и памяти — существует. Он имеет значение — число размером с разрядность машины, а значение числа — это адрес в памяти.
    Указатель как число — может быть передан в регистрах, лежать на стеке, и т.д.
    При обращении к байту/слову/двойному слову/… по смещению через указатель, в машинном коде указатель разыменовывается (в явном виде берется его значение=адрес) т.е. в машинном коде происходят несколько другие действия, чем в случае для массива.

    Если хотите понять полностью — откройте рядом книжку по ассемблеру, компилируйте Ваши примеры с выводом промежуточного ассемблерного кода (или смотрите в дизассемблер), и аккуратно сравнивайте по шагам.

    Вот, кстати, приличное описание различий на английском:
    eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c/
    Ответ написан
    Комментировать
  • Выполнение участка кода в реальном времени, засекаем время?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    По поводу таймеров в Windows есть неплохая вводная статья Jan Wassenberg «Timing Pitfalls and Solutions»
    github.com/0ad/0ad/raw/master/docs/timing_pitfalls.pdf
    Ответ написан
    3 комментария
  • Использование альтернативы Visual Studio Command Promt

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    1) Я делал батники — cfar, qfar, vcfar (соответственно, для mingw, qt, vc ), которые сначала ставят нужные переменные окружения, потом вызывают фар.
    2) Потом нашел плагин Environment Manager.
    Ответ написан
    Комментировать