Задать вопрос
  • Проблема с записью в структуры первой и последней строчки кода(последняя не записывается вовсе) В чем может быть проблема?

    @res2001
    Помимо озвученной в вопросе проблемы в представленном коде есть и другие более серьезные проблемы, а именно:
    1. зачем разделение структур на доллар и евро. Структуры одинаковые обе, вы работаете с ними одинаково, все одно и то же продублировано по 2 раза. Это ужасно! Сделайте одну обобщенную структуру, добавьте в нее поле код валюты и сделайте для этой структуры одну реализацию функционала и используйте его для любой валюты, можете потом хоть все валюты мира добавить в нее.
    2. Зачем вы курс и дату храните в строковом представлении? Вы никак не проверяете входные данные, а если там вам подложат "свинью", как поведет себя ваша программа? Никогда нельзя доверять данным поступающим из вне, без детальной их проверки.
    3. Вы не привели форматы файлов из которых вы читаете информацию. По коду могу догадаться о их содержимом, но предполагаю, что содержимое немного не такое, как реализовано в коде. Вполне возможно, что отсюда и растут ноги у вашей проблемы.

    В общем после вышеперечисленных проблем разбираться с проблемой в вопросе даже как-то скучно. Могу только дать подсказку - в случае с евро у вас где-то в нужном месте не пишется завершающий нулевой байт, что заставляет cout выводить больше символов, чем нужно. По сути выводится какой-то мусор лежащий в памяти рядом вплоть до какого-то случайного нулевого байта. Кстати наверняка с долларом у вас есть та же проблема, просто вам пока повезло (на самом деле не повезло) и она не проявилась. Но она может проявиться с долларом при каком-то подходящем изменении кода и/или изменении входных данных.

    UPD:
    4. зачем вы реализовали собственный вариант strcmp и strtod? Вы уверены, что вы их сделали правильно? Функции из стандартной библиотеки отшлифовывались годами. Пользуйтесь.
    Написано
  • Возможно ли реализовать TCP на Delphi?

    @res2001
    Mors Clamor,
    В любом случае, вы рекомендуете использовать именно UDP?

    UDP я рекомендую, если бы вы просто ограничились своим протоколом ориентированным на соединение с гарантией доставки и потоковой передачей данных без претензий на совместимость с TCP. Реализовать такой свой протокол никак не связанный с TCP гораздо проще, чем делать альтернативную реализацию совместимую с TCP.

    Если же очень хочется совместимости с TCP, то UDP не подойдет точно.
    Не уверен, что это можно сделать на винде, я просто не в теме.

    В линуксе это возможно можно, и я видел альтернативные реализации стека TCP/IP работающие в линуксе параллельно родному стеку, но на отдельном сетевом адаптере. Я видел работающую систему на Линукс, где в качестве альтернативной реализации был стек TCP/IP выдернутый из OpenBSD и немного допиленный под потребности конкректного использования. Если что, сам я не принимал участия в этой разработке, знаю только теоретически ну и видел уже итоговый результат в работе.

    Работает это примерно следующим образом:
    1. Надо очистить стандартные настройки TCP/IP для выбранного сетевого адаптера
    2. Средствами iptables и traffic control (tc) блокируется весь трафик на выбранном сетевом адаптере - это позволяет минимизировать расходы на стандартную обработку в ядре
    3. В своей реализации для работы в user space на линуксе используются PF_PACKET сокеты (не PF_INET) - это сырые Ethernet сокеты, пакеты вы будете получать вместе с Ethernet заголовком и т.п. и тут уже вы вольны реализовыввать любые протоколы над Ethernet, в т.ч. и альтернативный стек TCP/IP. Но при этом IP то же надо будет реализовывать, а вместе с ним и ARP и ICMP. PF_SOCKETы работают еще до правил iptables и tc, поэтому заблокированный фаервол в п.2 не будет мешать вашему сокету. Вот тут на вики есть картинка со схемой прохождения пакетов и тут видно, что в PF_PACKET сокет пакеты уходят по отдельной ветке обработки (дублируются): https://en.wikipedia.org/wiki/Netfilter

    Есть аналогичные разработки достаточно известные в узких кругах :) DPDK, PF_XDP (реализован в ядре линукса для обхода стандартного стека, особо не вникал), OpenFastPath - стек TCP/IP в user space.

    Вероятно можно заменить только реализацию TCP, но не весь TCP/IP. Возможно тут помогут сокеты PF_INET/SOCK_RAW, но тут я ничего не скажу, т.к. не интересовался подобным сценарием.
    Возможно подход будет примерно похожим с блокировкой средствами стандартного фаервола всех стандартных TCP пакетов и своей обработкой TCP пакетов. В таком случае вы получите функционал IP/ARP/ICMP/UDP из ядра, а TCP будет ваш собственный.

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

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

    @res2001
    На сколько я понимаю, в вашем случае для каста Base* к Specific* подключается механизм RTTI, а это всегда дорого, т.к. будет выполняться в run-time (обычно касты выполняются в compile time) и лучше обходиться без этого.
    Написано
  • Возможно ли реализовать TCP на Delphi?

    @res2001
    RAW-sockets с последних версий не могут быть использованы для создания TCP сессий

    Зачем TCP сессии? Вы же делаете грубо говоря MyTCP, а про MyTCP сессии ограничений нет :-)
    Вы не сделаете замену "родному" TCP, т.к. для этого нужно его убрать из системы и добавить свой. Как минимум у TCP фиксированный идентификатор протокола в IP заголовке и там не может быть 2 вариантов обрвботчика TCP.
    Поэтому вы делаете свой протокол с поддержкой соединений + представление данных в виде потока.

    который в свою очередь использует под капотом libcap

    libcap - это не про сокеты. Видимо имелось ввиду libpcap.
    Зачем pcap и прочее?
    Делайте свой TCP на базе UDP.
    Подход будет практически таким же, как если бы вы делали на сыром IP сокете.
    Написано
  • Как через bat информацию полученную в cmd внести в другой bat в определенную строчку?

    @res2001
    Альтернативные варианты:
    1. передать это как параметр командной строки в другой бат и использовать его там соответствующим образом
    2. устанавливать переменную окружения с соответствующим значением, а во втором батнике использовать эту переменную окружения. Второй батник должен запускаться из первого.
    3. сохранить инфу в файл, во втором батнике читать ее из файла.
    Написано
  • Почему программа остаётся в фоновых процессах после закрытия?

    @res2001
    Видимо программа продолжает работать по какой-то причине. Возможно где-то в деструкторах вечный цикл или что-то похожее.
    Попробуй после завершения программы, подцепиться к висящему процессу отладчиком. Конечно программа должна быть собрана с отладочной информацией.
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, В доке vcpkg все написано, про триплеты, про то как устанавливать разные варианты библиотек, как использовать библиотеки в проекте MSVS. Тебе туда надо. 100%
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, Блин, оказывается не static/dinamyc в триплете, а release/debug. Ну я уже года 3 не заглядывал туда :) подзабылись детали.
    похоже на нужную library???

    Нет. Это не тот вариант. dbg - в триплете означает, что это версия с отладочной информацией. Другой вариант - видимо релизный, т.е. без отладки.
    Ты видишь, что тут же в этом каталоге лежит и TgBot.dll - это значит, что lib файл для динамической библиотеки.
    В статическом варианте tgBot.dll не будет в каталоге, только lib побольше размером, чем этот.
    Похоже у тебя статический вариант библиотеки не установлен. Но его можно установить дополнительно с помощью опций vcpkg. А этот вариант лучше удалить, чтоб не мешался, т.к. тебе он не нужен.
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, 1. Это создатели vcpkg так называют сборное название платформы, туда входит ОС, разрядность и static/dynamic на сколько помню. Подробней можно почитать в доке vcpkg, они там много по этому поводу пишут.
    vcpkg --help
    2. Это название подкаталога после installed на твоем последнем скрине
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, То что лежит в buildtrees, это видимо после сборки осталось. Видимо это можно почистить какой-то командой vcpkg.
    Тебе по идее нужны те что в installed/<triplets name>/
    Что лежит в packages не помню.
    Какие у тебя каталоги <triplets name>? На сколько помню по имени триплета можно понять что это за библиотека (динамическая/статическая, x32/x64)
    Но вообще у vcpkg есть штатный способ использования библиотек в проекте. Читай документацию по нему или погугли какие-нибудь примеры использования библиотек из vcpkg в проекте MSVS.

    Вообще во всех 3 местах buildtrees/packages/installed должно лежать одно и то же. Так что у тебя всего 2 варианта.
    Чем они отличаются - смотри триплеты.
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15,
    я нашел еще 5 кроме этой lib как понять какая мне нужна?

    Нашел где? В vcpkg, по идее, не должно быть 5. Ну может быть 4 по две для x32 и x64. Откуда еще одна взялась?
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, Я бы просто удалил лишние триплеты для этой библиотеки из vcpkg, тогда у компилятора выбора не будет.
    https://learn.microsoft.com/en-us/vcpkg/concepts/t...
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15, В микросовтовском компиляторе все библиотеки подключаются через lib файл и статические и динамические. Просто в случае с динамической библиотекой в lib находятся ссылки на dll, а в статической - исполняемый код библиотеки.
    Так что ты видимо взял lib от динамической библиотеки. Ну или не ты взял, а компилятор его нашел и подключил.
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Ars_15,
    линковку сделал

    Линковку сделал ты в любом случае, раз приложение собралось и запустилось. С динамическими библиотеками то же "линковка".
    Раз они у тебя в зависимостях, значит линковку ты сделал с динамической библиотекой, а не со статической.
    Статическая библиотека вся будет содержаться в твоем исполняемом файле и для нее не будет показана внешняя зависимость.
    Написано
  • Почему после статической линковки на другом пк все равно запрагивает dll?

    @res2001
    Вообще можно посмотреть зависимости exe от библиотек. В составе микросовтовского компилятора должны быть утилиты командной строки для этого, какой-нибудь аналог objdump.
    Когда-то использовал GUI утилиту dependency walker, но она вроде как давно не обновляется, не знаю заработает или нет на современной винде.
    Написано
  • Как сделать линковку в проекте на с++ Visual Studio?

    @res2001
    Ars_15, Почитай что-нибудь по интеграции библиотек из vcpkg в проект MSVS. Там у него есть какой-то стандартный механизм, который просто добавляет пути поиска библиотек и заголовочников из репы vcpkg в MSVS.
    Написано
  • Как сделать линковку в проекте на с++ Visual Studio?

    @res2001
    Да, кстати, vcpkg по моему, по умолчанию собирает и статическую и динамическую версии библиотек. Сами файлы библиотек можно поискать в каталоге vcpkg, там все довольно просто устроено. В статической библиотеке будет 1 большой файл lib, в динамической 2 файла: маленький lib и большой dll.
    Другое дело, что компилятор, обычно, если найдены обе версии библиотеки использует динамическую по умолчанию.
    В связи с выше сказанным можно пойти двумя способами: удалить динамическую версию библиотеки (или ставить только статическую) или заставить компилятор (опциями) использовать именно статическую версию этой библиотеки.
    Как второй вариант сделать для микросовтовского компилятора я не в курсе, гугли.
    Написано
  • Как сделать линковку в проекте на с++ Visual Studio?

    @res2001
    Ars_15,
    Если знаешь подскажи сразу please)

    На вскидку не помню. Давно уже не пользовался. Но точно знаю, что там это делается, в свое время сам это использовал. В документации по vcpkg указано, там надо другой "триплет" применять, на сколько я помню. vcpkg ведь не устанавливает бинарники библиотек, он собирает их на месте из исходников, так что ему в принципе пофиг собирать динамическую или статическую либу.
    И да я сделал на Visual Studio lib библиотеку пытаюсь связать с проектом но выдает

    Не понятно при чем тут obj файл. Статическая либа для микросовтовского компилятора идет в lib файле и больше ничего не нужно (кроме заголовков). Похоже ты что-то делаешь не так.

    Вообще для подключения любых библиотек есть несколько простых шагов которые надо выполнить, шаги эти общие для любого компилятора, но детали могут отличаться. Т.к. ты используешь IDE, то на это то же надо сделать скидку, но в любом случае все настройки IDE в этой части в итоге преобразуются в соответствующие опции компилятора.
    Расписывал тут несколько раз это, например тут.
    Написано
  • Как сделать линковку в проекте на с++ Visual Studio?

    @res2001
    Ars_15,
    1. Библиотека умеет сама собираться в статическую библиотеку с помощью собственного CMakeLists.txt. Никакой отсебятины делать не нужно. Можешь сам собрать ее при желании, надо только немного разобраться с cmake. А потом подсунуть lib файлы и заголовки твоему проекту.
    2. Судя по описанию на github, библиотека есть в репозитории vcpkg, а следовательно ее можно установить в виде статической библиотеки средствами vcpkg. Рекомендую этот путь. В readme библиотеки есть описание того как поставить ее в vcpkg. Я правда давно его не использовал, не уверен поставится ли в таком варианте статическая версия или динамическая. Но средствами vcpkg можно поставить статическую. Разберись с vcpkg - это пакетный менеджер, часто используется совместно с MSVS.
    Написано
  • Не понимаю, почему происходит потеря пакетов. Как решить?

    @res2001
    Вит,
    сначала отработал неделю, потом три дня - когда после включения стал работать по полчаса - поехал сдавать

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

    У меня есть и положительный пример, года 3 назад покупал в баню роутер. Брал самый бюджетный, какой-то DEXP или что-то похожее, сейчас уже и не вспомню марку/модель, вообще ни о чем. Баня вымораживаемая, так что думал накроется быстро из-за перепадов температур зимой и повышенной влажности, поэтому и не брал дорогой девайс. Но вот уже 3 года полет нормальный, тьфу три раза.
    Написано