Доброго времени суток! В Telegram существует два вида API: Telegram Bot API (обыкновенный бот с пометкой "бот") и Telegram API (клиент и юзербот, который обладает больше функционалом, чем просто бот). В этой статье пойдет речь о втором виде, а именно: что требуется для взаимодействия с Telegram API, какие средства нужны для написания кода своего юзербота на языке C#, как их правильно установить, а также каким образом использовать их.Читать полностью »
Рубрика «MSVC»
Telegram API и библиотека TDLib для .NET платформ
2023-06-16 в 14:01, admin, рубрики: .net, .net core, C#, cmake, MSVC, openssl, TDLib, telegram, telegram api, timeweb_статьи, zlib, Блог компании Timeweb CloudC++ по итогам 2022-го
2023-01-13 в 16:54, admin, рубрики: c++, carbon, clang, cppfront, gcc, MSVC, val, конференцииДолжен признать, что в некоторые из предыдущих лет C++ мог ощущаться немного «скучным» и «стабильным». Новые фичи, новый стандарт каждые три года, встречи, конференции... обычная жизнь (не считая некоторых дополнительных событий в мире, экономике и эпидемиологической ситуации). Прошедший год отличается, потому что выглядит как «переломный» в истории C++... и кто знает, куда это заведёт нас.
С++23: международный стандарт на удалёнке
2020-12-08 в 7:10, admin, рубрики: bugs, c++, C++20, c++23, clang, Clang-Tidy, gcc, IT-стандарты, MSVC, stack trace, stacktrace, Блог компании Яндекс, Компиляторы, Программирование, С++
C++20 прошёл все бюрократические инстанции и теперь официально готов! Международный комитет переехал в онлайн, и теперь мы вовсю работаем над C++23. Под катом вас ждут:
- std::stacktrace,
- z и uz,
- 61 с половиной багфикс в ядре языка,
- string::contains,
- Executors & Networking,
- и прочие новости.
Вторая жизнь Virtual Floppy Drive
2020-10-04 в 11:24, admin, рубрики: abandonware, C, MSVC, open source, reactos, SourceForge, visual c++, Visual Studio, виртуализация, переносимость, разработка под windowsКогда-то давно у меня была коллекция старинных версий Windows в виртуалках, и для переноса файлов между хост-машиной и этими виртуалками приходилось использовать дискету, потому что поддержка shared folders появилась только в Windows for Workgroups.
Перенос файлов через дискету был медленным и шумным, и моему восторгу не было предела, когда я нашёл драйвер Virtual Floppy Drive, позволяющий создать «виртуальный флопповод» и подключить его в VM как обычный. К сожалению, интерес автора к своему проекту угас в 2005, а в 2010 его сайт и емейл перестали существовать. С тех пор в мире Windows успело произойти много перемен:
- Повсеместно стала использоваться 64-битная ОС, в которую невозможно загрузить 32-битный драйвер, скомпилированный в 2005;
- Windows начиная с Vista SP1 стала требовать для загрузки драйверов либо цифровую подпись, либо муторные манипуляции, требующие перезагрузку системы;
- Проект, написанный в Visual C++ 6, не собирается в современных версиях Visual Studio после автоматической конвертации.
Как можно и как нельзя использовать нулевой указатель в С++
2020-07-30 в 12:23, admin, рубрики: c++, clang, Cpp, gcc, MSVC, null, promwad, нулевые указатели, Программирование, Производство и разработка электроники, Разработка под Linux, С++
Некоторым этот банальный вопрос уже набил оскомину, но мы взяли 7 примеров и попытались объяснить их поведение при помощи стандарта:
struct A {
int data_mem;
void non_static_mem_fn() {}
static void static_mem_fn() {}
};
void foo(int) {}
A* p{nullptr};
/*1*/ *p;
/*2*/ foo((*p, 5));
/*3*/ A a{*p};
/*4*/ p->data_mem;
/*5*/ int b{p->data_mem};
/*6*/ p->non_static_mem_fn();
/*7*/ p->static_mem_fn();
How the CSS markup fragment broke the C++ compiler
2019-03-27 в 6:18, admin, рубрики: C, c++, microsoft, MSVC, visual c++, Visual Studio, Блог компании PVS-Studio, разработка под windows
Static analysis methodology involves various technologies. One of them is preprocessing files right before analyzing them. Preprocessed files are created by the compiler that runs in a special working mode. Unfortunately, our long-standing experience of developing a static analyzer shows that this mode is not great for testing. In this note, I'll give the example of a fresh bug in the C++ compiler from Microsoft.
Читать полностью »
Как фрагмент CSS разметки сломал C++ компилятор
2019-03-27 в 6:14, admin, рубрики: C, c++, microsoft, MSVC, visual c++, Visual Studio, Блог компании PVS-Studio, разработка под windows
В методологии статического анализа применяются разные технологии. Одна из них — препроцессирование файлов непосредственно перед их анализом. Препроцессированные файлы создаёт компилятор, запускаемый в специальном режиме работы. К сожалению, этот режим не очень хорошо тестируется, как показывает наш многолетний опыт разработки статического анализатора кода. В этой заметке приведу пример свеженайденного бага в С++ компиляторе от Microsoft.
Читать полностью »
Компилятор Microsoft позволяет добавить расширение «novtable» для атрибута «__declspec» при объявлении класса.
Заявленная цель — значительно уменьшить размер генерируемого кода. На экспериментах с нашими компонентами уменьшение составило от 0,6 до 1,2 процента от размера DLL.
Применимость: классы, не предназначенные для создания экземпляров напрямую из них.
Например: чисто интерфейсные классы.
В коде это выглядит так:
struct __declspec(novtable) IDrawable
{
virtual void Draw() const = 0;
};
Примечание: ключевое слово struct использовалось для декларации интерфейсного класса, чтобы избавить пример от не относящихся к теме статьи деталей; тогда как в случае использования class пришлось бы использовать public для указания «публичности» методов. По той же причине я не буду в этой статье добавлять виртуальный деструктор в интерфейсный класс.
Название «novtable» обещает, что виртуальной таблицы не будет… Но как же работает механизм вызова виртуальных функций в следующем коде:
// Добавим декларацию прямоугольника, реализующего интерфейс IDrawable:
class Rectangle : public IDrawable
{
virtual void Draw() const override
{
}
int width;
int height;
};
…
IDrawable* drawable = new Rectangle;
drawable->Draw(); // происходит вызов Rectangle::Draw
…
C++: сеанс спонтанной археологии и почему не стоит использовать вариативные функции в стиле C
2018-11-16 в 7:53, admin, рубрики: C, c++, clang, gcc, MSVC, va_list, вариативные фукнции, Компиляторы, неопределённое поведение, Программирование, эллипсисНачалось все, как водится, с ошибки. Я первый раз работал с Java Native Interface и делал в C++ части обертку над функцией, создающей Java объект. Эта функция — CallVoidMethod
— вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.
Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в CallVoidMethod
использовал va_list
, потому что по-другому в данном случае никак. Да, так и отправил va_list
в CallVoidMethod
. И уронил JVM банальным segmentation fault.
За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной CallVoidMethod
есть CallVoidMethodV
, которая произвольное число аргументов принимает через va_list
.
Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и va_list
. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list
, и (поскольку речь все-таки о C++) с вариативными шаблонами.
Читать полностью »
Релиз CLion 2017.1: C++14, C++17, код на дизассемблере в отладчике, Catch, MSVC и многое другое
2017-03-31 в 15:48, admin, рубрики: C, c++, C++14, c++17, Catch, CLion, disassembly view, IDE, jetbrains, MSVC, Блог компании JetBrains, ПрограммированиеПривет! Спешим поделиться радостной новостью – мы выпустили первый в этом году релиз нашей кросс-платформенной IDE для C и C++, CLion 2017.1!
Наши планы, как обычно, немного превосходят наши возможности и ресурсы. Но в этот релиз нам удалось успеть почти все из запланированного. Если вкратце:
- Поддержка C++14 (всё кроме constexpr)
- Начальная поддержка C++17 (мы начали с самой востребованной возможности – nested namespaces)
- Возможность конвертировать тип переменной в auto
- Во время отладки программы, при отсутствии файлов с исходным кодом можно переходить на код на дизассемблере (disassembly view)
- Поддержка фреймворка для юнит-тестирования Catch
- Значительное ускорение отклика редактора при печати кода (Zero Latency Typing)
- И, наконец, экспериментальная поддержка компилятора Microsoft Visual C++!
И это еще не все! Читайте подробности ниже.
Кстати, попробовать все новые возможности можно на небольшом демо-проекте, который мы специально подготовили для этих целей.
Читать полностью »