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

    @rPman
    все что касается сети можно получить используя консольную утилиту netsh
    с ней работать проще чем ковыряться в WMI хотя последнее более верно
    Ответ написан
    Комментировать
  • Не запускается код на C++, что не так?

    @rPman
    внизу в окне ошибок проскролируй вправо строчку, где написано
    cl командная строка error D8027: нельзя выполнить "C:\Program Files....

    путь явно ссылается на какую то нужную утилиту в папке установки Visual Studio, это значит она установлена не верно, необходимо запустить программу установки заново и выбрать repair (восстановить)
    Ответ написан
  • Что означает данное число 0x55555555555555551 в C++?

    @rPman
    0x55555555555555551 - 16-ричная система исчисления, для его хранения требуется 9 байт, т.е. может быть записано в только как 16-байтовое целое (__int128) или большей разрядности или в классах поддерживающих переменное количество байт для хранения чисел. gnu compiler официально не поддерживает 128бит константы, так что их придется заводить через строки или собирать вручную из чисел меньшей разрядности

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

    @rPman
    В си решение будет зависеть от выбора платформы, под которую разрабатываешь, для win32 gui вполне возможно что тебе хватит отлавливать закрытие окна на событии WM_CLOSE в твоем главном цикле обработки событий окна, а для posix это регистрация колбек с помощью signal на тип события SIGTERM (там можно и на другие события повеситься, даже к примеру на принудительное завершение ядром процесса по исчерпанию лимита оперативной памяти)...

    Первая же ссылка в гугле по запросу: c++ exit current process callback, направление поиска указано в вопросе. Не все виды завершения работы процесса могут быть отловлены самим процессом, в частности у вопрошающего проблема с консольным приложением в windows... возможно если порыть msdn можно будет найти еще какое решение.
    Ответ написан
  • Как отправлять письма по email через c++?

    @rPman
    google: c++ lib email
    откроет мир готовых библиотек по работе с почтой, выбирай на любой вкус и твою среду и компилятор.

    c++ такой язык что программы на нем достаточно многословные получаются

    p.s. первый же результат из гугла https://github.com/karastojko/mailio

    message msg;
    msg.from(mail_address("mailio library", "mailio@gmail.com"));
    msg.add_recipient(mail_address("mailio library", "mailio@gmail.com"));
    msg.subject("smtps simple message");
    msg.content("Hello, World!");
    
    smtps conn("smtp.gmail.com", 587);
    conn.authenticate("mailio@gmail.com", "mailiopass", smtps::auth_method_t::START_TLS);
    conn.submit(msg);
    это многословно?
    Ответ написан
    Комментировать
  • Как вызвать функцию в зависимости от полученного числа, без использования условных операторов?

    @rPman
    Решение тебе уже сказали - определить функции в массив/map каждую соответственно значению и вызывать.

    Альтернативы не будет. Имя функции не попадает по стандарту в итоговый бинарник, это временная сущность, а значит по имени (сформировав ее к примеру 'func'+n) вызвать никак не получится, но есть исключения, например если требуемые функции - экспортируемые (для dll например), соответственно в зависимости от целевой ОС использовать win32 GetModuleHandle/GetProcAddress, для linux гугл подсказывает dlopen/dlsym.

    Так же можно попробовать проанализировать отладочную информацию, которая будет сохранена в exe-шнике или рядом в файле, само собой код должен быть собран в режиме debug.

    но это страшнейший быдлокод
    Ответ написан
  • Матрица в матрице?

    @rPman
    В c++ есть запись математически схожая с доступом к элементам матрице в математике запись:
    m[x][y] - т.е. мы берем элемент xy матрицы m (формально наоборот конечно, сначала строки Y потом колонки X но в конечном счете разницы никакой, кроме как если важна оптимизация).

    В реальности же эта запись означает что мы берем x-ый массив в списке m и у полученного массива берем y-ый элемент, т.е. m имеет тип массив массивов элементов, и для работы с ним его нужно инициализировать, создав нужное количество массивов одинаковой размерности.

    p.s. иногда, когда хочется 'простоты' инициализации, уменьшения фрагментации памяти, более эффективный доступ последовательный к элементам, можно хранить массив в виде одномерного массива всех элементов матрицы, а доступ к элементам получать, вычисляя смещение в этом массиве как x+y*N, где N - размер матрицы по X, т.е. m[x+y*N], зато когда надо работать последовательно со всеми элементами с лева направо, сверху вниз, можно просто работать по смещению в этом одномерном массиве m[i++]

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

    const int N=3;
    const int M=2;
    int ml[N*M]={1,1,1,2,2,2};
    // матрица:
    // 111
    // 222
    int* m[M];
    for(int i=0;i<M;i++) m[i]=*(ml[i*N]);
    //
    for(int i=0;i<M*N;i++) ml[i]...
    и
    for(int y=0;i<M;i++) 
      for(int x=0;i<N;i++) 
        m[y][x]... // порядок колонки строки тут перевернут, но можно заранее это учитывать и перевернуть везде в коде для удобства восприятия

    p.p.s. может где то ошибся но не принципиально, сто лет не писал на си
    Ответ написан
    Комментировать
  • Как добавить в конец char символы?

    @rPman
    в c++ уже очень давно есть полноценные (и соответственно медленные, но не в реализации а идеологически) строки, класс string с которыми и + прокатит и синтаксически удобные
    Ответ написан
    Комментировать
  • Api gpt-2 на C++?

    @rPman
    там обычные http запросы, подключай любую библиотеку и пользуйся, например libcurl (первый пример из гугла)
    p.s. на c++ будет неудобно
    Ответ написан
  • Как перевести программу c++ в ехе и что бы запускал ось на любом компьютере с Windows?

    @rPman
    Вопрос очень на самом деле сложный.

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

    Зачастую, если пользуешься какой-нибудь средой разработки (IDE, например Microsoft Visual Studio) то за сборку exe файла и всего проекта будет отвечать она, а пользователю в мышевозекательном интерфейсе дается возможность настроить все необходимое.

    Например создавая проект "Консольное приложение c++" (название приблизительное, не помню точно уже) проект будет автоматически настроен на сборку консольного приложения, лишних библиотек не подключено и т.п. Мало того, возможно понадобится собрать приложение сразу для нескольких архитектур (x86 и x86_64 например), т.е. по набору exe/dll на каждую архитектуру, и бывают случаи когда даже файлы баз данных не переносимы и потребуют свои для каждой.

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

    В самых простых случаях, когда на целевой машине даже не надо создавать ярлык (просто распаковать и все), можно воспользоваться каким-нибудь self extracted archive (у winrar такая опция есть). Иногда инструменты для создания такого пакета есть в самой IDE (точно помню у visual studio для managed .net кода такое было), а иногда это стороннее приложение, для windows рекомендую попробовать inno setup, позволяет создавать не только exe установщик но и msi (специализированный формат windows для установочных архивов), это приложение позволяет описывать процесс установки в виде некоторого языка, не заморачиваясь с интерфейсом.

    p.s. windows нет прямого ограничения по запуску приложений без установки, т.е. просто копируй вручную exe файл и все

    upd. для с++ добавляется еще один челедж, решить, каким компилятором собирать, какими стандартами (стандарт реализация эксепшен try/catch/throw, формат имен подключаемых dll и т.п.), какими базовыми библиотеками (например какая будет использоваться libc) и даже для какой версии ОС собираешь (например собрав под последнюю win10 приложение может не запуститься на win7 или winxp, потому что будет требовать несовместимую версию visual studio redistributable (vcredist*.exe этот пакет обновлений таскают с собой все кому не лень, и кстати по лицензии делать это без разрешения майкрософт низязя)

    Так уж исторически сложилось, что нормально тулчейн найти под windows можно либо:
    * gcc (gnu c compiler) - задает всем остальным, тут полнее реализуют новые стандарты, работает во всех ОС, но при этом есть windows сборка (смотреть у mingw кстати она есть по до все ос, позволяет кросскомпиляцию типа из linux собрать windows exe) а есть cygwin (несовместимая ни с чем, но качественно повторяет linux стандарты)
    Поговаривают что mingw все, кончился :(
    * microsoft visual c++ compiler (идет с visual studio), пытается задавать свои ни с чем не совместимые стандарты, корежит существующие, с целью создать хаос и привязать разработчиков только к windows
    и это у майкрософт получается, к сожалению
    * llvm и clang (это отдельные проекты но когда говорят об одном то и о другом), стандарт стоит особняком, так как llvm это некая виртуальная машина, с очень эффективной реализацией, с jit и оптимизациями
    настроить на windows это еще надо уметь, но есть возможность прописать для использовании в visual studio!
    Ответ написан
    Комментировать
  • Как можно ограничить доступ к папке при помощи драйвера?

    @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, первый же пример из гугла.
    Ответ написан
    Комментировать