Ответы пользователя по тегу C++
  • Какая разница между interface в С# и чисто виртуальными функциями в класах С++?

    Nipheris
    @Nipheris Куратор тега C++
    Одно и то же, чисто абстрактные классы в C++ это способ получить функциональность, аналогичную понятию "интерфейс" в тех языках, где оно есть (C#, Java, etc.).
    Благодаря множественному наследованию в C++ среди базовых классов могут быть как классы с реальным поведением (т.е. с реализациями каких-либо методов), так и классы-"интерфейсы", т.е. классы только с pure-virtual функциями-членами.
    Ответ написан
    Комментировать
  • Как передать char указатель функции dll, чтобы можно было в дальнейшем разобрать на массив?

    Nipheris
    @Nipheris Куратор тега C++
    [DllImport("вашалиба.dll", CharSet = Ansi, CallingConvention = CallingConvention.Cdecl)]
    public void LaunchJavaApplet([In] string[] JVMOptions);
    Ответ написан
  • Как из файла json ввести данные в таблицу QTableView?

    Nipheris
    @Nipheris Куратор тега C++
    1) создать подходящую модель (например, наследоваться от QAbstractTableModel);
    2) загрузить данные из json;
    3) реализовать модель из п.1 так, чтобы она возращала значение конкретного свойства в зависимости от запрошенного столбца;
    Ответ написан
    Комментировать
  • Как перехватывать весь трафик и перенаправлять на прокси в C# или С++ (пишу в VS)?

    Nipheris
    @Nipheris Куратор тега C++
    Вадим Егоров
    > подключение к прокси при настройке через панель управления осуществляется по протоколу HTTP
    Конечно по HTTP, под "прокси" обычно и понимают как раз таки HTTP-прокси. Если вам нужно перенаправлять ЛЮБЫЕ TCP-соединения, т.е. в том числе те, которые не имеют вообще никакого отношения к HTTP (например, SMTP), то тогда обычно пользуются соксами (https://en.wikipedia.org/wiki/SOCKS), а если программа сама не умеет инкапсулировать трафик в этот протокол - то используют соксификатор, например такой www.freecap.ru .
    Нужен ли вам socks или нет - это зависит от того, что у вас там за прокси. Я еще раз отмечу, что не понимаю, что это за сервер такой, что он шифрует и по какому протоколу работает. Если это ваш собственный протокол, то тогда у вас два пути:
    1) вы пишете локальный socks-прокси, направляете программы через него (путем настройки программы или путем насильственной соксификации), а он уже шифрует трафик как вам надо и общается с УДАЛЕННЫМ прокси по ВАШЕМУ протоколу
    2) вы пишете аналог соксификатора, т.к. программу, которая будет форсировать передачу трафика через себя, и также будет шифровать его и направлять по ВАШЕМУ протоколу на удаленный прокси. Тогда вам скорее всего и придется разбираться с перехватом пакетов. Самым простым вариантом будет использование WinPcap - тогда не нужно будет работать в режиме ядра (это не самая простая вещь на свете), плюс в современных версиях этой же либой можно и отправлять пакеты: www.winpcap.org/docs/docs_412/html/group__wpcap__t... . FreeCap реализует иной подход - он перехватывает вызовы Winsock API у целевого процесса, заменяя их на свои функции. Вариант интересный, но ИМХО менее надежный.
    Ответ написан
  • Как сгенерировать код с++ из php?

    Nipheris
    @Nipheris Куратор тега C++
    то мне нужно было сделать сайт на си++

    вы ничего не перепутали?
    Я могу вам дать пару советов, но не уверен, что они вам нужны.
    EDIT: простейший вариант - SPA с JSON WebAPI на плюсах (например, связка cpp-netlib.org + https://github.com/nlohmann/json/ )
    Ответ написан
    4 комментария
  • Каких файлов не хватает приложению для запуска?

    Nipheris
    @Nipheris Куратор тега C++
    См. ответ Ринат Велиахмедов - универсальное решение, когда непонятно, что происходит.

    Хотя, если "наваял программку", то есть вероятность, что вы делаете попытку дистрибуции впервые. Поэтому, сначала скомпильте релиз-версию вашей программы, чтобы зависеть от релизных библиотек, а не от дебажных (VC Redist ставит только релизные библиотеки, т.к. дебажным место только на компьютерах разработчиков). Если не поможет, открывайте dep walker и в студию список зависимостей.
    Ответ написан
    9 комментариев
  • Как сделать релиз проекта с directx?

    Nipheris
    @Nipheris Куратор тега C++
    Подключить в релизной конфигурации релизные библиотеки и выбрать релизную конфигурацию при сборке проекта.
    Ответ написан
    7 комментариев
  • Как работать с Com портом на C++ и Python?

    Nipheris
    @Nipheris Куратор тега C++
    boost::asio::serial_port - просто, кроссплатформенно, и со вкусом. Единственный минус - зависимость от буста. Однако если он в проекте уже и так есть - то тогда и проблем нет.
    Ответ написан
    Комментировать
  • Microsoft Visual Studio 2013, как перейти от простого вывода в консоли до полноценных программ?

    Nipheris
    @Nipheris Куратор тега C++
    как начать создавать программы с интерфейсом?

    Понять, что C++ имеет большую экосистему с множеством библиотек, которыми надо научиться пользоваться. Узнать, что такое Qt, wxWidgets, услышать краем уха про MFC (но не пользоваться без необходимости). Обязательно узнать про boost.
    Visual Studio 2010 я перетаскивал элементы кнопок, меню и тп. как показать это меню?

    Сложно догадаться, где вы это перетаскивали. В студии есть не только C++, то и масса других языков и технологий, возможно вы пользовались Windows Forms в связке с C#.
    Ответ написан
  • Как можно использовать Visual Studio 2013 Platform Toolset в Visual Studio 2015?

    Nipheris
    @Nipheris Куратор тега C++
    1) поставить компилятор из 2013-й студии;
    2) выбрать установленный тулсет в свойствах проекта.
    Ответ написан
    2 комментария
  • Скомпилированная программа на Qt просит библиотеку qt5cored.dll, где искать?

    Nipheris
    @Nipheris Куратор тега C++
    <Папка установки Qt>\qtbase\bin - берем все что нужно и копируем в папку с exe. Что конкретно нужно, можно выяснить с помощью Dependency Walker или просто пытаться запустить, пока не запустится. А, да, еще вам плагин для платформы понадобится, создаете рядом с exe папку platforms, идете в подпапку с таким же именем в qtbase\bin, копируете оттуда qwindows.dll. Если этого будет недостаточно - ошибку в комментарии.

    Пробовал переименовать qt5core.dll в qt5cored.dll, пишет, что не может найти вход в библиотеку.

    Переименовывать не стоит, даже если бы это заработало, вы бы поймали кучу непонятных ошибок при отладке. Вам нужно либо скачать готовые дебажные dll-ки, либо скомпилить дебаг-версию Qt самому.
    Ответ написан
    Комментировать
  • Как сделать графический интерфейс программ на C++?

    Nipheris
    @Nipheris Куратор тега C++
    Смотрел в сторону Qt, но что то как то не сраслось.


    А надо, чтобы срасталось. Нет, конечно вам правильно пишут, что библиотек всяких еще много, и правильно пишут, что многие современные библиотеки рисуют с помощью OpenGL, но лично я вам советую Qt, раз уж начали знакомиться. Я сомневаюсь, что с остальными либами вам будет сильно проще (особенно с WinAPI или c WTL - Кьют покажется детской игрушкой).

    Популярные программы потому имеют хороший интерфейс, что у их производителей есть время и деньги его сделать, а самое главное - ПОТРЕБНОСТЬ. Ведь их продукты популярны! Adobe готова вылизывать Фотошоп до блеска, и в состоянии написать свою собственную библиотеку, т.к. это дорогой продукт, используемый по всему миру.
    Ответ написан
    Комментировать
  • Как шифровать соединение для winsock?

    Nipheris
    @Nipheris Куратор тега C++
    Это делается путем общения по протоколу TLS. С точки зрения OSI, этот протокол работает поверх транспортного уровня, т.е. после установки TCP соединения вы ВМЕСТО обыкновенных незашифрованных данных отправляете и получаете TLS-пакеты. Также, почитайте про STARTTLS, с помощью которого можно инициировать шифрованное соединение поверх уже открытого существующего (т.е. это способ сказать, что вы не хотите переоткрывать TCP-соединение, а хотите прямо здесь начать работать по TLS).
    Разумеется, вам точно не стоит пытаться реализовать TLS самому. Вам помогут OpenSSL или PolarSSL. Они подготовят вам как служебные TLS-пакеты, так и зашифруют полезную нагрузку.
    Ответ написан
    Комментировать
  • Как записать файл на диск в обход файловой системы(для ускорения)?

    Nipheris
    @Nipheris Куратор тега C++
    https://toster.ru/answer?answer_id=692948

    А вообще правильно вам тут пишут - ФС делали далеко не глупые люди. Если хотите максимально увеличить производительность - лучше выделите:
    а) отдельный раздел с отдельной файловой системой для ваших данных
    б) поставьте RAID, не говоря уж об SSD
    Алгоритмы кэширования в ОС сейчас достаточно развиты, люди десятилетиями их разрабатывали.

    А насчет возможно - да пожалуйста. В *nix открываете файл дивайса в /dev и работаете. В винде - аналогично: права администратора, открываете нужный дивайс и вперед, блоками читаем и пишем, через WinAPI.
    Ответ написан
  • Есть ли простой способ подключить динамическую библиотеку ( .dll) в проект?

    Nipheris
    @Nipheris Куратор тега C++
    Что-то тут вам насоветовали в комментах....

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

    Если статически - то ничего сложного нет, создайте в студии проект DLL или сами прочитайте про макросы для импорта/экспорта - они нужны, чтобы с ОДНИМ И ТЕМ ЖЕ хедером и компилить DLL, и пользоваться ей. По сути вам нужны эти макросы (которые студия сделает за вас, если создадите проект по шаблону), и вам нужно проставить их на каждом классе или свободной функции, которые нужно экспортировать. Все. Теперь вы можете и саму DLL скомпилить с этим заголовочным файлом, и подключить его в другой проект, который должен использовать DLL.

    Если динамически - тогда без описания прототипов действительно не обойтись. И генерация из DLL тоже не особо поможет вам, т.к. информация о классах действительно потеряется.

    Запомните - роль метаданных для компилятора C++ играют именно заголовочные файлы. В отличие и java и прочих дотнетов, где информация о том, что "внутри" поставляется вместе с кодом в том же самом контейнере (в пакете в джаве и в сборке в дотнете), скомпилированные нативные модули вроде EXE, ELF, DLL, LIB, SO и прочих не имеют стандартизированных способ хранить информацию о классах. Они просто не на том уровне работают - они больше для операционной системы или линковщика, чем для компилятора. А классы - это фишка конкретного языка, в Си например нет классов по определению. Соответственно, низкоуровневые вещи вроде DLL не должны заботиться о такой вещи, как классы C++. Поэтому практически с любой библиотекой на C++, даже если она компилится в LIB или DLL, поставляется хедер-файл. Возможно, вы еще не сталкивались с Boost - в нем многие классы вообще не могут быть скомпилированы заранее, т.к. являются шаблонными, и поэтому они поставляются прямо в виде заголовочных файлов. Такие библиотеки, в которых все или часть сущностей не подлежат предварительной компиляции, а поставляются в виде исходного кода файлов для последующего инклуда, называются header-only. Это вам для общего развития.

    Так что и в случае динамического подключения, все не так сложно - вам точно так же нужно иметь заголовочный файл с прототипами, а также с парными им типами указатель-на-функцию. Этот хедер также можно будет использовать как в самой DLL, так и при ее загрузке через LoadLibrary и получении функций через GetProcAddress (вы же это имели в виду в вопросе?). Но еще раз отмечу - это "сложный" способ, который требуется только если вы заранее НЕ ЗНАЕТЕ, что хотите загрузить - это используется как правило для реализации плагинов.
    Ответ написан
    2 комментария
  • Клиент-серверное приложение для диплома - что придумать?

    Nipheris
    @Nipheris Куратор тега C++
    > но не слишком простое и банальное типа чатика?
    защищенный чатик. С передачей файлов. И голоса. И видео.
    Ответ написан
    Комментировать
  • Какую цветовую модель использует OpenGL?

    Nipheris
    @Nipheris Куратор тега C++
    > 4 компоненты, явно не RGBA
    это шутка такая?

    > Значение варьируются от 0 до 1
    да, значения во float-е, так удобнее интерполяцию делать. 0.0 это 0, 1.0 это 255.
    Ответ написан
    2 комментария
  • Как перекомпилировать проект под x86 платформу?

    Nipheris
    @Nipheris Куратор тега C++
    Win32 это и есть x86 (по кр. мере в контексте компилятора Microsoft Visual C++)
    Ответ написан
  • Как создать двумерный массив в управляющем классе?

    Nipheris
    @Nipheris Куратор тега C++
    array< Color, 2 >^ mat = gcnew array< Color, 2 >(MouseX - OldX);

    https://msdn.microsoft.com/en-us/library/dtbydz1t.aspx

    управляющем классе

    наверное вы имели в виде управляемый (managed).
    Ответ написан
    Комментировать
  • Какой язык лучше для управления памятью С++\С#(ручное управления или автоматическое)?

    Nipheris
    @Nipheris Куратор тега C++
    C++ разумеется, может быть даже Си, в C# низкоуровневостью и не пахнет
    Ответ написан
    7 комментариев