Linda-chan
vb программизм Вчера я узнала, что парсер VB IDE знает о ключевом слове CDecl в Declare и не ругается на него. Правда, вызов функции, объявленной так, всё равно приводит к ошибке «Bad DLL calling convention», при чём сразу же, без попытки что-либо сделать вроде загрузки DLL. Думаю, что это что-то оставшееся в наследство от QuickBasic.
mabu
программирование Вы меня почти убедили в необходимости искусственно замедлять программы и делать их толстыми и неповоротливыми, но всё же такое понятие как технический долг заствыляет меня отказаться от создания BloatWare. У вас есть аргументы поверьёзнее, чем «тяп‐ляп и готово»?
mabu
программирование «Интуитивно понятный интерфейс» — это как вообще? Сиди и угадывай что это значит?
Я выбру логично понятный интерфейс.
Вместо всяких интуиций, угадываний, гаданий, предсказаний на кофейных гущах что значит эта пимпочка.
mabu
программирование Чат, объясни мне, почему новые версии компилятора не запускаются на старых операционных системах? Какие ещё ConditionVariable? Компилятору нужно три с половиной функции максимум: ReadFile, WriteFile и ExitProcess. Это же дебилизм, шизофренизм, имбецилизм.

mabu
программирование Ну что же, будете ждать когда сборщик мусора не вовремя запустится, заморозит все потоки и почистит авгиеву конюшню ваших неиспользуемых объектов?
А счётчик ссылок работает прямо сейчас и без тормозов, ссучечки.
Linda-chan
программизм Как я люблю это. Надо сделать одну бяку в имеющейся программе. Оказывается, что для того чтобы её сделать нужен код, который часто запиливаю в разных проектах, и пора бы его вынести в какую-нибудь библиотеку. Есть две библиотеки: в одну код запиливать лень, в другой всё внутрях немного не так устроено, и код либо впиливается по-хорошему с переписыванием части внутренностей, либо по-плохому и не очень красиво. И вот такая фигня каждый раз.
mabu
программирование freebasic Строку BSTR можно создать как литеральную константу.

Пример:

```
' Первые два символа — количество байт в строке без учёта завершающего нуля
' Порядок байт Little Endian, от младшего к старшему
Const HttpMethod = WStr(!"\06\00GET")
Const HttpUrl = WStr(!"\52\00https://www.lindachan.net/")
```

1. Создаём константу. Декорируем литерал в WStr, потому что строка BSTR юникодная по своей природе.
2. Литерал должен предваряться знаком «!», чтобы в нём можно было делать экранированные последовательности.
3. Первые два символа литерала следует устанавливать в число байт, которые занимает в памяти строка BSTR (без учёта завершающего нулевого символа). Для этого ставим через обратный слэш ASCII‐коды количества символов в литерале умноженных на два, потому что UTF-16. Порядок байт Little Endian: младшие байты указывают слева, старшие — справа. В этом примере длина строки 3 символа, количество байт строки 6, поэтому указываем сначала \06 потом \00.
4. Такую строку нельзя уничтожать и модифицировать, то есть вызов SysFreeString для неё запрещён. Данные располагаются в секции с атрибутом ReadOnly, создаются и уничтожаются загрузчиком системы.
mabu
программирование Однажды быдлокодеры собрались на площади окончательно решить вопрос, можно ли BASIC называть компилятором, когда он лишь транслирует код в Си?
Тогда вышел бейсик‐программист и сказал: «Тогда и Си не компилятор, он лишь трансрирует код в ассемблер».
Быдлокодеры смутились и разошлись.
mabu
программирование freebasic Внимание, спойлер! программа получилась размером 2048 байт.

Сделал не тут программу, которая скачивает с сайта страницу и отображает заголовки ответа и тело в коробке сообщений.

Для уменьшения размера пришлось прибегать к хитростям:
* самому определять GUID для XmlHttpRequest;
* объединить секцию кода с секцией данных.

Хотя у меня не получилось объединить секции .text и .idata, но это бы всё равно не повлияло на размер конечного файла из‐за выравнивания секций. Ещё система отказывается запускать файл, если компоновщику указать файловое выравнивание не кратное 512 и выравнивание секций не по 4096.

Я уверен, что вы сделаете ещё меньше и жду вашего результата.

disk.yandex.ru
mabu
программирование freebasic Оказывается у окон с классом EDIT есть встроенная всплывающая подсказка. Её можно назначить через Edit_ShowBalloonTip.
Но это работает только в шестой версии Comclt32.dll.
Заодно добавил UpDown к полям.

mabu
программирование freebasic Обновил шрифт и размеры дочерних окон под стиль Windows XP.
Ещё добавил проверку пользовательского ввода на корректность: выскакивают сообщательные коробки, попозже сделаю

mabu
программирование Я сделал программу для вычисления корней квадратного уравнения, с графическим интерфейсом.
Размер получился 9728 байт.
Основной размер съедают ресурсы с диалогом и манифестом.
zamabuvaraeu/QuadraticEquation: Решение квадратного уравнения (github.com)

mabu
программирование Строки в Unicode просты и логичны. Все символы в них представлены 16-битными значениями (по 2 байта на каждый). В них нет особых байтов, указывающих, чем является следующий байт — частью того же символа или новым символом. Это значит, что прохождение по строке реализуется простым увеличением или уменьшением значения указателя. Функции CharNext, CharPrev и lsDBCSLeadByte больше не нужны.
УДК 004.43
ББК 32,973,26-018
Рихтер Дж.
Р558 Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows/Пер, англ — 4-е изд. — СПб; Питер; М.: Издательско-торговый дом "Русская Редакция", 2001. — 752 с.; ил.
ISBN 5-272-00384-5
mabu
программирование freebasic Сегодня 12.04.2021 выпустили финальную версию 1.07.3.
Изменения:
— C backend: switch to .text section after writing the exports to the C file in the explicit asm block. gcc can move sections around with optimizations and there is a change between 7.x and 8.x that causes issue with where the directive section is located

Это последняя версия из ветки 1.07, следующие релизы будут из ветки 1.08.
mabu
программирование Я тут решил первый раз отладить программу через GDB.
У меня файлы исходных кодов в кодировке UTF-16 LE. И GDB не умеет отображать текст такого файла.
Пришлось конвертировать кодировку в ANSI.
mabu
программирование Ух ты, что‐то новенькое! Некий ТвинкБейсик обещает полную совместимость с VB6 и VBA:

Welcome!
twinBASIC is a modern version of the classic BASIC programming language. With twinBASIC we aim for 100% backwards compatibility with existing VB6 and VBA projects.

We aspire to offer a complete replacement development environment for classic BASIC projects whilst also bringing many new features and improvements over the old VB6 IDE and compiler.

Here at twinBASIC, we are BASIC fanatics. For the initial release, we have put painstaking effort into building a solid and well tested compiler, standard library and debugger. Our top priority has been to make sure that we copy every last quirk (or feature?) found in the legacy VB6 compiler.

twinbasic.com
mabu
программирование Ваш язык программирования берёт на себя слишком много полномочий, решая за программиста какой кусок от стэка ему дозволительно или недозволительно использовать.
Патернализм в таких вопросах неуместен.
mabu
программирование В FreeBASIC любая сущность, объявленная, но не определённая в пределах компилируемого файла считается внешней. Это относится к функциям в такой же степени, как и к внешним переменным. Ссылки на внешние функции остаются в скомпилированном объектном файле именно ссылками, и будут заменены на обращения к настоящим сущностям только на этапе линковки.

Не существует никакой разницы между PrivetVasya(), PRINT, MID, LEFT или CreateWindowEx(): с точки зрения компилятора все абсолютно равнозначны и про них можно сказать «да это просто какие-то внешние функции». Когда Очень Умные Учителя©®™ начинают говорить «встроенная функция языка PRINT», а это популярный бред, — надо понимать, что это просто глупость, что в язык ничего такого не встроено, что компилятор обрабатывает вызов к PRINT, MID, LEFT на тех же условиях, что и вызов к любой другой функции, да хоть в соседнем файле реализованной.

Что касается той же PRINT, то это лишь ключевое слово языка, которое компилятор использует как шаблон для подстановки на вызов настоящих функций fb_PrintString, fb_PrintInt, fb_PrintWstr и подобных. Компилятор не знает об этих функциях ничего, кроме информации, содержащейся в её объявлении: список параметров, их типы и тип возвращаемого значения. Компилятор не знает, чему равно fb_PrintInt("abc") и не знает, меняет ли она глобальньую переменную `Dim Shared Vasya As Long`. Компилятор даже не знает в какой библиотеке лежат эти функции, потому что это задача компоновщика — связывать символы.

Тем не менее, есть поистине встроенные функции, для которых в компиляторе на самом деле реализована особая обработка — они называются intrinsic-ами. При вызове intrinsic-функции компилятор генерирует особый код, характерный именно для данной функции: не генерируется никакого call-а, не будет никакого реального вызова и возврата, а будет несколько инструкций, выполняющих нужную задачу. По сути, они позволяют избавиться от использования inline-ассемблера, так как его использование часто нежелательно или невозможно. Пример: дефиниции, обрамлённые __двойными__ подчёркиваниями.

У разных компиляторов набор intrinsic-ов разный. Intrinsic-ом может быть и функция, которая штатно должна жить в стандартной библиотеке. В MSDN приводится список функций, которые могут быть заменены их intrinsic-версией. Это, например, memcpy, strcmp.
Linda-chan
программы программизм Важно понимать, что когда какой-нибудь девелопер выкатывает lightweight-что-то, то это самое lightweight относится исключительно к количеству строк в «демонстрационном» примере использования. Под капотом там обычно фреймворк на ферймворке фреймворками погоняет.
mabu
программирование Параметры в линексе принято начинать с дефисоминуса «-». Я правильно понимаю, что во избежание неоднозначности с параметрами программы, название файлы на диске нельзя начинать на дефисоминус? Как система понимает, что это был параметр, а не название файлы?