Ответы пользователя по тегу C++
  • Как можно ограничить доступ к папке при помощи драйвера?

    @rPman
    У всех возник вопрос зачем? почему такая простая задача (папку надо шифровать, если она ntfs) решается на столько неадекватным способом?

    Если я верно понимаю концепцию фильтров - регистрируешь I/O фильтр, мониторишь что кто куда и даешь при необходимости отлуп. В документации есть пример кода на примере мониторинга операции удаления файлов
    Ответ написан
    Комментировать
  • Как поместить Windows окно в DLL файл в Visual Studio 2019?

    @rPman
    С точки зрения разработки приложений winapi код не будет чем то отличаться, просто вместо стартовой функции main будет функция dllmain буквально просто меняешь стартовую функцию, свойства проекта и вот у тебя уже dll.

    НО загружать эту dll сторонние приложения должны уметь. А они в свою очередь могут потребовать чтобы эта dll была организована особым образом, т.е. имела определенные функции, использовала определенные типы переменных и т.п. Т.е. нужно читать документацию этого языка, подробно с примерами.

    Достаточно давно майкрософт предложила универсальный инструменты OLE, COM и фреймворк ActiveX специально чтобы был стандарт для межпроцессорного взаимодействия, не важно на чем эти процессы написаны, и до сих пор активно его поддерживает в своих продуктах, хотя не во всех.

    Технология очень удобная для использования, хотя наверное очень 'многословная' для программиста.

    К сожалению/или нет, на эту технологию все забили более чем полностью, и изобретают все свое. Могу предположить из-за лицензии использования (как и все, за что берется майкрософт и их маркетологи, превращают отличную идею в говно), но этот момент нужно уточнять.
    Ответ написан
    Комментировать
  • За какое время с нуля до высокого уровня получится овладеть с++ если очень очень плотно изучать?

    @rPman
    Не путать язык программирования и библиотеки/фреймворки и принципы их построения. А еще есть банально алгоритмы и умение их создавать и хотя бы правильно использовать. А еще есть тулчейн - рабочее окружение, без которого в принципе запустить сборку не получится, и очень часто умение настраивать его под задачу может занимать больше времени и знаний чем сама разработка. Попробуй к примеру собери из исходников браузер (cromium или firefox), чтобы подправить в исходниках пару простых моментов.

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

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

    Невозможно подготовить тебя исключительно теоретически, и потом стать великим гуру на практике, как минимум нужна практика в процессе обучения, и вот уже от нее и твоих способностей к обучению и от образа мышления и будет зависеть, как долго нужно будет идти к цели, может и годами.
    Ответ написан
    Комментировать
  • Как распаковать zip архив?

    @rPman
    именно c++17?
    а просто c не катит? готовая библиотека, подключай, пользуйся
    Ответ написан
  • Разработка игр для андроид на языке С++?

    @rPman
    android это зоопарк железа (и не только процессоры), к сожалению красивого фреймворка именно для c++ нет, отсюда разработка даже простейшего приложения (особенно если нужен доступ к перифирии и графическому ускорителю) очень сложны, хотя разрабатывать библиотеку, выполняющую критичную к скорости часть - почему нет

    зы. лучше всего на android функционал покрыт java фреймоврками, соответственно и разрабатывать лучше/легче на java а точнее под виртуальную машину dalvik virtual machine (это машина исполнения скомпилированного кода java, можно найти компиляторы из других языков но красивая поддержка только у java)
    Ответ написан
  • Как правильно запустить клиент-серверную программу?

    @rPman
    Ну так произошла одна из ошибок, но в коде нет ничего чтобы сообщить тебе какая именно.
    Например поменяй коды возврата функции main на разные (сейчас там везде стоят -1), так сможешь понять по коду который тебе вернет программа при завершении, в каком месте это произошло.

    И еще, лучше в момент ошибки перед завершением работы программы вывести текстом, что именно произошло.
    Ответ написан
    Комментировать
  • Как управлять чужими TCP соединениями на Windows?

    @rPman
    Поставить утилитку (не обязательно ее) и с ее помощью брякать подключения? Или подвисшие соединения никак не сбрасываются штатно?

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

    p.s. Странно что в вопросе показан очень высокий уровень понимания и при этом не готовы написать свое приложение, использующее lsp для контроля?
    Ответ написан
    Комментировать
  • Почему dev c++ медленно компилит?

    @rPman
    Очень странный выбор среды разработки
    Во первых оно не работает
    буквально - поставил, создал пустой проект, при компиляции вылезает ошибка компиляции
    make.exe: *** [main.o] Error -1073741674
    (код ошибки разный, в зависимости от использования моей версии mingw или той что идет в поставке со средой разработки), в интернете про эту ошибку пишут - да это так и есть, глючит с make, ставьте более старые сборки О_о

    особенно если учесть что это проект заброшен

    Форк от embarcadaero работает но получаемый exe-шник получается под 3мб, т.е. по дефолту он докидывает библиотек до кучи каких то.

    Проект и так использует gcc так что причина не в нем, а в makefile которые он собирает, так я это вижу.

    p.s. сам по себе gcc собирает не космически быстро, нужно понимать это и готовиться заранее
    пользуйся precompiled headers это должно немного ускорить сборку больших проектов, если не меняешь часто хеадеры.
    Ответ написан
    Комментировать
  • Как создать проект с++ на основе готового кода?

    @rPman
    Это известная беда кроссплатформенности или кроссфреймворков, в мире существует столько полусовместимых и там столько нюансов, и кстати это беда не только у c++ но и с другими языками, только реже.

    Кто то должен давать инструкции и тестировать. Хорошим тоном было бы чтобы это делал сам разработчик, но нужно понимать что в opensource вам никто ничего не должен, люди делают для себя и своих задач, и требовать чтобы что то выложили для вас... как минимум некрасиво. Сделай сам или заплати тому кто умеет, выложи инструкции открыто - тебе скажут спасибо.

    У этого проекта вики такая инструкция написана и даже видео выложили
    Ответ написан
    Комментировать
  • Можно ли сделать демона из программы, которая читает файл?

    @rPman
    Любая программа может являться демоном, если ее настроить на автоматический запуск и если ее работа будет фоновой, скрытой от пользователя.

    Консольные программы, те что не работают с графической оболочкой, могут быть таковыми без переделки (да и графическую можно запустить в фейковом xserver).

    Способ настройки отличается для каждой версии linux, например для ubuntu сейчас это systemd, первый же пример из гугла.
    Ответ написан
    Комментировать
  • Будет ли утечка памяти при использовании такой конструкции С++?

    @rPman
    нет
    кардинально неверное использование деструктора

    Деструктор вызывается когда вы уже вызвали удаление объекта delete msp, и призван удалить все что объект проинициализировал но не его самого.

    Отличный пример, использование класса для автоматического закрытия файла

    class FR
    {
      FILE *f;
      public:
      FR(char* name)
      {
        this->f=fopen(name,'r');
      }
      void do()
      {
        // тут работаем с файлом
        // если произойдет проблема, вызываем эксепшн
        throw "The problem";
      }
      ~FR()
      {
        fclose(this->f);
      }
    }
    
    void main()
    {
      try
      {
        FR fr('test.txt');
        fr.do();
        printf("all ok");
      } catch(const char* msg)
      {
        printf("Error: %s\n",msg);
      }
    }

    тут голова не болит когда закрывать файл, так как деструктор будет вызван автоматически при окончании жизни объекта
    Ответ написан
    2 комментария
  • Как обратиться к ячейке памяти?

    @rPman
    *((unsigned __int8*)0xb000)
    Ответ написан
    Комментировать
  • Увеличение размера массива объектов?

    @rPman
    массивы инициализируются по другому
    Class_ListPerson[size]={Class_ListPerson(...),Class_ListPerson(...),..};
    если есть конструктор без аргументов, то можно без всего что справа.

    Изменить размер массива нельзя, так как его размер не хранится нигде и является константой, т.е. придется работать не с самим массивом а ссылкой на него и заполнять вручную через выделение памяти (можно конечно работать со ссылкой на первый элемент как у вас, но это bad practics, ссылки надо избегать всеми способами).
    Ответ написан
  • Стоит ли учить программирование по старой книге?

    @rPman
    Лишней книга не будет, но из-за устаревшей парадигмы и стандартов у вас возможно (не видел книгу) возникнут проблемы с компиляцией примеров.

    С другой стороны получите основы без современной шелухи, которая помогает решать задачи но часто мешает решать проблемы, если они возникают с готовыми решениями.
    Ответ написан
    Комментировать
  • Почему выводит 0?

    @rPman
    потому что
    cout << NumNewline(digit);
    а в самой функции стоит
    return 0;
    Ответ написан
    Комментировать
  • Как скомилировать с++ программу под Линукс?

    @rPman
    чтобы запустить приложение из GUI необходимо создать ярлык в этом GUI, в зависимости от вашего окружения (gnome/kde/xfce и т.п.) инструкции будут разными но похожими. В общем случае если ваше приложение консольное, то запускать его нужно с помощью терминала, их тоже много на выбор от самого древнего и примитивного xterm до штаных для каждого DE, например для kde это kconsole.

    вот примеры команд для разных терминалов чтобы окно после завершению работы программы не закрывалось:
    https://switch-case.ru/71821000
    Ответ написан
    Комментировать
  • Как из программы получить доступ к UI полям другой программы?

    @rPman
    Правильный способ (не советую) - сложный, нужно выявить точную версию компонент, собрать соответствующее приложение с их использованием (только так можно будет использовать объекты и вызывать методы правильно) и инжектить его код в процесс. Тогда вы получите доступ ко всем элементам и сможете делать что то типа getText()

    Неправильный (рекомендую) - простой, симулируете действия пользователя, отправляя окну события клавитуры и мышки (или напрямую через средства ОС, например в windows это отправка сообщений WM_... в win api есть соответствующие методы), к сожалению в QT компоненты не являются win api объектами, даже label таковым не является и у вас будет просто одно окно с битмапом, а это значит для чтения содержимого окна можно использовать только экран (и распознование текста по изображению) и в некоторых случаях clipboard, например необходимое поле это EditBox, симулируем команду ctrl+a (выделить весь текст) ctrl+c (скопировать) и тут же читаем содержимое в своей программе

    Второе успешно использовалось в проекте где необходимо было получать данные из программ, написанных с использованием ОЧЕНЬ разных инструментов и следить за компонентами каждого чтобы пересобирать код инжекта каждый раз как оно обновится - геморно.
    Ответ написан
    Комментировать
  • Как правильно пользоваться разделителем кода для Windows и linux?

    @rPman
    Смотрите чем вы будете собирать, так как различия могут появиться в зависимости от инструмента, например собирая под cygwin/mingw/visualstudio может потребоваться менять код, и сильно.

    Дефайны могут отличаться в зависимости от использованных инструментов для сборки, а то может у вас scons и сами дефайны определяются в скриптах или makefile, как ВАМ пожелается, хотите _WIN32_ хотите WINDOWS хотите как угодно...
    Ответ написан
    Комментировать
  • Как переопределить функцию в шаблоне с++?

    @rPman
    Все свои SomeClassX породите от базового SomeClass определенным виртуальным методом show, тогда шаблон не понадобится, просто в классе Tree в методе show(SomeClass t) напишите t->show() а сам show определите в каждом SomeClassX свой.
    Ответ написан
    5 комментариев
  • Можно ли что то написать зная базовые основы С++?

    @rPman
    Можно что то написать, зная вообще одну математику и даже не используя условия, циклы и т.п., одни математические выражения, что то из серии ненормального программирования. Но мне кажется, почесывать горло через задницу будет примерно так же дико и не практично.

    ООП это очень простая часть языка c++. Проблема не в языке, а в библиотеках, которыми пользуешься чтобы не изобретать велосипед... их не то чтобы учить нужно, просто уметь пользоваться и въезжать в идеологию.
    Ответ написан
    Комментировать