Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/78: Рейтинг темы: голосов - 78, средняя оценка - 4.86
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Изучение основ FreeBasic в сравнении с PowerBasic

10.10.2022, 22:17. Показов 21994. Ответов 218

Студворк — интернет-сервис помощи студентам
Всем добра и мира!

К сожалению, PowerBasic прекратил своё развитие вследствие смерти его создателя и главного (а скорее всего, единственного) разработчика Роберта Зейла в 2012-ом году. К настоящему времени последние надежды на его развитие окончательно угасли. В связи с этим я решил приступить к изучению основ FreeBasic'а.

В этой ветке форума буду задавать вопросы, возникающие у меня в процессе ознакомления с этим ЯП.

Как говорится, всё познаётся в сравнении. Ну вот и буду изучать FreeBasic, опираясь на определённый опыт ЛЮБИТЕЛЬСКОГО программирования на PowerBasic'е.

Буду очень благодарен за любую помощь.

Итак, первый возникший у меня вопрос.

Каким образом в структурах FreeBasic'а появилась возможность использовать динамические строки?
В PowerBasic'е это строго запрещено. Можно использовать только строки фиксированной длины.

Вот 2 работающих (с одним и тем же результатом на консоли) кода для сравнения:

FreeBasic
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TYPE Persons
    Name AS STRING
    Surname AS STRING
    Age AS BYTE = 35
END TYPE
 
DIM Vpersons AS Persons
 
Vpersons.Name="Richard"
Vpersons.Surname="Black"
 
? Vpersons.Name
? Vpersons.Surname
? Vpersons.Age
Sleep
PowerBasic
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#COMPILE EXE
#DIM ALL
 
TYPE Persons
  Name AS STRING*10       'если здесь написать "Name AS STRING", компилятор бастует
  Surname AS STRING*10   'если здесь написать "Surname AS STRING", компилятор бастует
  Age AS BYTE           'значение по умолчанию здесь присвоить не получится
END TYPE
 
FUNCTION PBMAIN () AS LONG
DIM Vpersons AS Persons
 
  Vpersons.Name="Richard"
  Vpersons.Surname="Black"
  Vpersons.Age = 35
 
  ? Vpersons.Name
  ? Vpersons.Surname
  ? Vpersons.Age
 
  SLEEP 5000    'если SLEEP без указания продолжительности, компилятор бастует
END FUNCTION
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2022, 22:17
Ответы с готовыми решениями:

Перегрузка методов (изучение основ)
Добрый день! Вот я добрался до перегрузки методов и быстренько накидал вот такой пример: using System; namespace...

Сколько в среднем часов уходит на изучение основ C++?
1) Если с нуля 2) Если после паскаля или чего то в этом духе

Групповое изучение программирование с основ без преподавателя
Суть: Студенты 3 курса Специальность: информационно вычислительная техника, после третьего курса "Аналитики" С с божьей...

218
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
13.11.2022, 16:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от locm Посмотреть сообщение
Не запускается под линуксом, не подскажите почему?
Поставьте вайн.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
13.11.2022, 16:41  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
У вас ведь есть опыт программирования на PowerBasic?
Тогда это не первый класс. Функция qsort не сложна для понимания. Принцип ее работы понятен из примера без чтения документации. https://cpp.com.ru/shildt_spr_po_c/18/qsort.html
Да нет, тут штука в другом.
Вы поймите, я нахожусь в процессе выбора нового для себя ЯП. Хочется сделать это с минимальными издержками. Ну а для этого этот новый язык должен быть наиболее близок к моему основному, ну то есть к PowerBasic'у. На самом деле, в идеале, прикрутить бы к PowerBasic'у 64 бита, и ничего другого мне уже не надо для "полного счастья" в плане набора инструментов для программирования. Но это, увы, не возможно и уже никогда не будет возможно.

Буржуи с PowerBasic-форума массово потянулись именно к FreeBasic'у. Ну вот и я вроде бы вместе с ними по течению плыву

Вроде бы считается, что FreeBasic по синтаксису близок к PowerBasic'у. Замечательно! Ну а как это определить? Только с помощью эксперимента, правильно?
Ну вот я и беру свои самые простые программы на PowerBasic'е, тупо скармливаю их компилятору FreeBasic'а, и анализирую, какие ошибки он покажет

Вот именно такой подход "к телу" и стал первоосновой рождения этой ветки

Ну и да, действительно, многие встроенные функции совпадают практически один в один. Например, работа со строками. В PowerBasic'е это Left$, Right$, Mid$, Trim$, ну дальше длинный список, все перечислять здесь не имеет большого смысла. А во FreeBasic'е это аналогичные по смыслу и по своей работе функции, но только записанные без знака доллара.

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

Работа с файлами почти идентична. Те же самые Open, Close, Input, Output, ну и всё остальное.

If, Select Case и всевозможные циклы тоже совпадают один в один.
Единственная разница в циклах - это вместо Iterate в PowerBasic'е во FreeBasic'е используется Continue.
Ну то есть тоже почти один в один кроме такой вот "мелочёвки".
Работает так же, только называется по другому.

Но вот в процессе такого вот экспериментального последовательного компилирования и внесения поправок дохожу до какой-то "фишки", которая свойственна только PowerBasic'у, ну например, POWERARRAY Object.

Ну и как это "обойти"?
Вот именно отсюда и возникла мысля использовать для таких случаев DLL в качестве обходного маневра
Я же не просто так (ну типо, от скуки) задавал вопрос по DLL выше по теме, а именно в поисках обходных лёгких путей

Ну а теперь, зачем я это всё так длинно рассказываю? Да чтобы попытаться объяснить, что мне эти вызовы "левых" функций, вот прямо сейчас совершенно не нужны. Я же сейчас сравниваю именно встроенные средства двух ЯП, а вовсе не их способности вызывать "левые" функции. Уж в зтом-то они точно равны друг другу, я ни минуты в этом не сомневаюсь

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну это же WinAPI. При чём здесь тогда сам FreeBasic? Как мне представляется, для использования WinAPI сгодится любой ЯП, ну или почти любой.
Потому что FreeBasic это видоизмененный си. И на нем придется программировать под win api, а это уже почти никто не делает, за исключением тех, у кого уйма свободного времени. Или надо подключать сторонние либы, которые упрощают программирование под окошки.
Ну это уже хуже
Мне-то как раз хотелось бы подобрать для себя новый ЯП с "низким порогом входа".

Цитата Сообщение от Замабувараев Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
Мы там про вызовы сишных функций пока ещё не проходили
Вам следует перестать мыслить в категориях «сишная функция», «фрибейсиковая функция», «винапишная функция».
У вас должна быть только одна категория — «функция». Функция как независимый участок кода, который принимает параметры и возвращает результат.
Я вам открою секрет: фрибейсиковая функция InStr — она на самом деле на си написана, в вашей терминологии — это сишная функция. Вас это сильно расстроит? Или как-то усложнит вам жизнь? Или после этого вам стало труднее писать название этой функции в редакторе и очень сложно ставить скобки и указывать внутри параметры?
Да я уж пытаюсь подбирать наиболее общие синонимы, чтобы удовлетворить ваши строгие взыскания к терминологии
Ну вы же сами написали, что это функция из Си, ну вот я и пишу "сишная функция"
Ну вы просто проявите снисходительность. Вы сейчас общаетесь не с профессионалом, а с дилетантом. И если он (дилетант), например, говорит "море", то под этим он может понимать и "озеро", и "океан". Ну не будьте так уж строги к используемой мною терминологии
Воспринимайте все мои слова в более широком смысле, с учётом всевозможных огрехов непрофессионала

Цитата Сообщение от Замабувараев Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
Мне сейчас пришло в голову, что с таким подходом можно изобрести такой ЯП, который вообще ни на что не будет способен кроме идеального вызова сторонних функций
Это язык называется Си.
Пожалуй да

Цитата Сообщение от Замабувараев Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
С моей точки зрения, в каждом уважающем себя ЯП должна быть встроенная возможность сортировки массивов, равно как и других базовых функций.
Си не имеет встроенных функций. Си — это несерьёзный и неуважающий себя язык?
Подразумевался язык с низким порогом входа для новичков.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
смысл basic именно в готовых встроенных средствах - графики из коробки, управление памятью + возможность по ручной оптимизации, то есть возможность иметь доступ к памяти напрямую посредством указателей. Ну и в отсутствии определенной парадигмы. Если он это не обеспечивает, то это не basic.
Ну да, мне тоже так кажется. Если на каждом шагу требуются вызовы WinAPI и прилагающиеся к ним знания, то это уже точно никакой не Basic (Beginner’s All-purpose Symbolic Instruction Code).
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
13.11.2022, 17:18
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну это уже хуже
Это очень плохо.
Цитата Сообщение от Power_Basic Посмотреть сообщение
Мне-то как раз хотелось бы подобрать для себя новый ЯП с "низким порогом входа".
Есть языки, которые легко выучить, но которые тянут за собой много того, что еще требуется знать: сторонние либы и пр. А есть языки, которые более сложно выучить, но имеющие всё самое нужное уже готовым. Современный "basic" это языки типа Python. Я для себя открыл Tcl. Считаю, что это пока и есть современные бейсики. Ведь там есть все - работа с окнами без всяких нативных API, сетевые функции, списки и гетерогенные массивы, где исключена работа с памятью, кроссплатформенность и т.п. При желании иметь игровой экран можно подключить дополнительный модуль. Создание окна там это не портянка в сто строк, а два слова.
Цитата Сообщение от Power_Basic Посмотреть сообщение
Если на каждом шагу требуются вызовы WinAPI и прилагающиеся к ним знания, то это уже точно никакой не Basic (Beginner’s All-purpose Symbolic Instruction Code).
Тем более это не кроссплатформенный код получается. То есть еще придется писать под каждую платформу отдельный код.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
13.11.2022, 17:59
Цитата Сообщение от Power_Basic Посмотреть сообщение
мне эти вызовы "левых" функций, вот прямо сейчас совершенно не нужны
Вам сортировка нужна или нет?
Цитата Сообщение от Power_Basic Посмотреть сообщение
встроенные средства двух ЯП
Есть функция которая работает, берите и пользуйтесь. Какая вам разница — встроено она или нет?
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,011
Записей в блоге: 7
13.11.2022, 18:04
Цитата Сообщение от Замабувараев Посмотреть сообщение
Поставьте вайн.
Приложение должно иметь полный доступ к системе, чего нет под вайном! Можете еще порекомендуете писать программы для Win11 на QB и запускать под DOS BOX?
Покажите пример работы с реестром на QB. Очень интересно посмотреть.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну и как это "обойти"?
Найти/написать аналог на FB.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Вот именно отсюда и возникла мысля использовать для таких случаев DLL в качестве обходного маневра
Разрядность exe и dll должна быть идентичная. Если на PowerBasic соберете x86 dll, ее не получится использовать в x64 приложениях.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Да чтобы попытаться объяснить, что мне эти вызовы "левых" функций, вот прямо сейчас совершенно не нужны. Я же сейчас сравниваю именно встроенные средства двух ЯП, а вовсе не их способности вызывать "левые" функции.
Если в FreeBasic нет идентичной функции, нужно искать аналоги и эти "левые" функции могут стать решением.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Если на каждом шагу требуются вызовы WinAPI и прилагающиеся к ним знания, то это уже точно никакой не Basic
В FreeBasic WinAPI используются очень часто.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
13.11.2022, 18:11
Цитата Сообщение от Power_Basic Посмотреть сообщение
Мне-то как раз хотелось бы подобрать для себя новый ЯП с "низким порогом входа".
А что там знать-то в этом фрибейсике? Базовые типы — Sub, Function, Integer, Long, Short, Byte, Single, Double и три типа строк. Типичные пользовательские типы данных: структура, массив, перечисление. Указатель в 32-битной архитектуре — это четыре байта, в которых хранится адрес переменной; взятие указателя на объект — это взятие адреса первого байта объекта, разыменование указателя — извлечение объекта из памяти по указателю. Указатель берётся с помощью «@», разыменовывается с помощью «*». Обращение к полю структуры осуществляется с помощью точки. a->b эквивалентно (*a).b. Массивы могут быть статическими, динамическими, одномерными, многомерными. Условные операторы: Select-Сase, If-Else. Циклы: Do-Loop, While и For. Есть побайтовые и булёвые операции вроде And, Or, Xor, Not.
Итого: за 10 минут можно выучить все 68 ключевых слов, ещё за час — всю стандартную библиотеку. Вот и весь язык.
https://www.freebasic.net/wiki/CatPgFullIndex

Добавлено через 6 минут
Цитата Сообщение от locm Посмотреть сообщение
Приложение должно иметь полный доступ к системе, чего нет под вайном!
Когда вы распространяете на своём сайте готовый исполняемый файл для линюкса, вас не удивляет, что для того, чтобы он заработал, необходимо поставить кучу библиотек вроде X, GTK, glibc, ОпенГёл и ещё чего там.
А тут вдруг удивило, что для этого примера нужно поставить вайн. Почему? В чём разница?
Вайн — такая же библиотека, как и все остальные.
2
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,011
Записей в блоге: 7
13.11.2022, 18:23
Цитата Сообщение от Замабувараев Посмотреть сообщение
А тут вдруг удивило, что для этого примера нужно поставить вайн.
Дело не в установке вайна. Дело в том что это эмулятор и нет полного доступа к системе. Я ведь выше приводил пример с Win11 и QB. Что не поняли?

А если все равно не поняли, попробуйте из вайна получить доступ к USB и откроете для себя что его нет как и к остальному железу!
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
13.11.2022, 18:39
Цитата Сообщение от locm Посмотреть сообщение
попробуйте из вайна получить доступ к USB
Но в моём коде нет доступа к USB.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,011
Записей в блоге: 7
13.11.2022, 19:05
А в моих проектах есть. Тоже касается и других приложений (IDE с отладкой через USB и др.).
То есть эмулятор это не кроссплатформенность.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
13.11.2022, 21:01
Цитата Сообщение от locm Посмотреть сообщение
Если на PowerBasic соберете x86 dll, ее не получится использовать в x64 приложениях.
ActiveX Dll получится.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
14.11.2022, 17:25  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Современный "basic" это языки типа Python. Я для себя открыл Tcl. Считаю, что это пока и есть современные бейсики.
Ну всё-таки хочется изучать чего попроще, а не что-то радикально новое
Ну да, Python сейчас в тренде, я знаю.
По поводу Tcl я погуглил. Скриптовый язык. Тогда уж джаву можно изучать.
Но мне на джаву переходить психологически очень дискомфортно, потому что много лет назад, когда был выбор между бейсиком, паскалем и джавой я выбрал бейсик. И если сейчас начать изучать джаву, то это как бы признать свою ошибку. А кто из нас любит признавать свои ошибки?
Допью уж до дна свою чашу
Ну в смысле, чашу бейсика

Цитата Сообщение от Замабувараев Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
мне эти вызовы "левых" функций, вот прямо сейчас совершенно не нужны
Вам сортировка нужна или нет?
Нет, не нужна.
Как известно, всё познаётся в сравнении. Ну вот я сейчас и занимаюсь тем, что сравниваю два языка.
Во многом они схожи, но есть и различия. Ну вот это и есть одно из различий.
Просто я запомню, что встроенной сортировки массивов во фрибейсике нет и для этой цели надо вызывать стороннюю функцию.

Вы понимаете, это две совершенно разные ситуации:
1. Разрабатывать относительно большую серьёзную программу и при этом столкнуться с какой-то проблемой, которую хочется поскорее решить, чтобы не сбавлять скорости общей разработки. И так попробовал, и эдак, ну никак не получается. Единственная надежда - спросить совет на форуме. Спросил, посоветовали, проблема решена, продолжил разработку.
Я часто бывал в такой ситуации, мне это очень даже знакомо.

2. Но сейчас у меня совершенно другая ситуация. Я никуда не спешу. Просто, не спеша, занимаюсь сравнением двух языков. Как я написал выше, начал писать на фрибейсике тренировочную утилиту, которая считывает содержимое текстового файла и подсчитывает число вхождений различных букв и цифр. Ну а когда всё уже было готово, решил добавить вишенку на торт
Ну в смысле, не просто вывести результат на консоль или в файл, а ещё и в упорядоченном по статистической частоте порядке. Ну вот и столкнулся с проблемой сортировки массива.
Но это именно тренировочная программа. У меня нет никакой необходимости её завершать.

Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
Вот именно отсюда и возникла мысля использовать для таких случаев DLL в качестве обходного маневра
Разрядность exe и dll должна быть идентичная. Если на PowerBasic соберете x86 dll, ее не получится использовать в x64 приложениях.
Ну да, это я уже понял. Выходит, что с помощью обычных DLL такие "фокусы" проделывать не получится. Остаётся надежда только на способ, который предложил The trick.

Цитата Сообщение от locm Посмотреть сообщение
Если в FreeBasic нет идентичной функции, нужно искать аналоги и эти "левые" функции могут стать решением.
Да это понятно. Если в ЯП встроенных средств для решения какой-то задачи нет, волей-неволей придётся прибегать к сторонним средствам.

Цитата Сообщение от locm Посмотреть сообщение
В FreeBasic WinAPI используются очень часто.
Видать придётся мне с этим смириться
Хотя всё-таки я буду стремиться к тому, чтобы почаще обходиться без них.

Цитата Сообщение от Замабувараев Посмотреть сообщение
А что там знать-то в этом фрибейсике? Базовые типы — Sub, Function, Integer, Long, Short, Byte, Single, Double и три типа строк. Типичные пользовательские типы данных: структура, массив, перечисление. Указатель в 32-битной архитектуре — это четыре байта, в которых хранится адрес переменной; взятие указателя на объект — это взятие адреса первого байта объекта, разыменование указателя — извлечение объекта из памяти по указателю. Указатель берётся с помощью «@», разыменовывается с помощью «*». Обращение к полю структуры осуществляется с помощью точки. a->b эквивалентно (*a).b. Массивы могут быть статическими, динамическими, одномерными, многомерными. Условные операторы: Select-Сase, If-Else. Циклы: Do-Loop, While и For. Есть побайтовые и булёвые операции вроде And, Or, Xor, Not.
Итого: за 10 минут можно выучить все 68 ключевых слов, ещё за час — всю стандартную библиотеку. Вот и весь язык.
https://www.freebasic.net/wiki/CatPgFullIndex
Спасибо за полезный экскурс!
Если не слишком углубляться в детали. то всё выглядит очень знакомым

Цитата Сообщение от Замабувараев Посмотреть сообщение
Указатель в 32-битной архитектуре — это четыре байта, в которых хранится адрес переменной; взятие указателя на объект — это взятие адреса первого байта объекта, разыменование указателя — извлечение объекта из памяти по указателю. Указатель берётся с помощью «@», разыменовывается с помощью «*».
У меня такое впечатление, что в PowerBasic'е знак "@" имеет противоположный смысл.

Ну вот например:

PowerBasic

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
#COMPILE EXE
#DIM ALL
 
FUNCTION PBMAIN () AS LONG
  local A as long
  local ptr_A as long ptr
 
  A = 555
  ptr_A = varptr (A)
  
  msgbox str$ (@ptr_A)
END FUNCTION
В результате получаем сообщение: "555".

А звёздочка в PowerBasic'е, насколько мне известно, вообще не используется применительно к указателям.

Цитата Сообщение от The trick Посмотреть сообщение
Цитата Сообщение от locm Посмотреть сообщение
Если на PowerBasic соберете x86 dll, ее не получится использовать в x64 приложениях.
ActiveX Dll получится.
Так может быть это и есть тот самый золотой ключик, который поможет выбраться из коморки папы Карло?!

Если я ничего не путаю, ActiveX и СОМ это синонимы. Честно говоря, практического опыта написания СОМ-серверов у меня, конечно же, нет, но я сегодня немного почитал на эту тему. Как я понял, это, в принципе, обычные DLL, но только подчиняющиеся СОМ-спецификациям и ещё их надо регистрировать в реестре, но это не сложно.
А что касается СОМ-спецификаций, то, как я понял, вообще все объекты, создаваемые в среде PowerBasic'а уже по умолчанию соответствуют требованиям СОМ. Так что с этой стороны проблем вроде бы возникнуть не должно.

Проблемы могут быть только с принимающей стороны
Ну в смысле, со стороны FreeBasic'а.
Теперь у меня вся надежда на Замабувараева. Не зря же у него над аватаркой написано, что он COM-пропагандист
1
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,011
Записей в блоге: 7
14.11.2022, 18:05
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну в смысле, не просто вывести результат на консоль или в файл
Попробуйте вывести в окно. Узнаете как в FreeBasic работать с окнами и сравните с PowerBasic.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Остаётся надежда только на способ, который предложил The trick.
Работа с COM моделью через WinAPI, намного сложнее чем вызов функции из процедурной dll.
Попробуйте и увидите.

https://www.cyberforum.ru/blog... g5213.html
1
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
14.11.2022, 18:42
locm, нет там ничего сложного.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
14.11.2022, 19:27
Цитата Сообщение от Power_Basic Посмотреть сообщение
Допью уж до дна свою чашу
Вы даже не представляете во что влезаете))
Короче придется с кишочками иметь дело..
Цитата Сообщение от Power_Basic Посмотреть сообщение
По поводу Tcl я погуглил. Скриптовый язык. Тогда уж джаву можно изучать.
Нет, только не джаву. Это ужас летящий на крыльях ночи.
Скриптовый это да, но это всего лишь обертка над сишной библиотекой. При этом язык ну совсем не пытается быть похожим на си. Да и экзешник можно получить если сильно хочется. Скриптовость и позволяет творить вещи немыслимые в других языках. Но не будем об этом в этой теме, ведь бэйсик наше всё. Конечно нет ничего идеального, но инструмент выбирают как бы по тому, что он умеет делать.
2
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
14.11.2022, 21:33
Цитата Сообщение от Power_Basic Посмотреть сообщение
Если я ничего не путаю, ActiveX и СОМ это синонимы. Честно говоря, практического опыта написания СОМ-серверов у меня, конечно же, нет, но я сегодня немного почитал на эту тему. Как я понял, это, в принципе, обычные DLL, но только подчиняющиеся СОМ-спецификациям и ещё их надо регистрировать в реестре, но это не сложно.
А что касается СОМ-спецификаций, то, как я понял, вообще все объекты, создаваемые в среде PowerBasic'а уже по умолчанию соответствуют требованиям СОМ. Так что с этой стороны проблем вроде бы возникнуть не должно.
COM сервер может быть и в виде ехе. Вон обычный Word/Excel - exe сервера. Регистрация не всегда нужна. Так или иначе можно избавится от регистрации.
2
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
15.11.2022, 15:45  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
COM сервер может быть и в виде ехе. Вон обычный Word/Excel - exe сервера.
Да, да, да, об этом я уже прочитал в документации PowerBasic'а:

COM Components usually take the form of an EXE, or DLL/OCX file, but the actual file extension is largely irrelevant. However, DLL/OCX versions of a component are generally referred to as "in-process", since they are loaded into the address space of the calling application. EXE-versions are typically "out-of-process" because they will not share the address space of the calling application.

COM-компоненты обычно имеют форму файлов EXE или DLL/OCX, но фактическое расширение файла в значительной степени не имеет значения. Однако версии компонента DLL/OCX обычно называются «внутрипроцессорными», поскольку они загружаются в адресное пространство вызывающего приложения. EXE-версии обычно «вне процесса», потому что они не будут совместно использовать адресное пространство вызывающего приложения.
Сейчас как раз буду заниматься тем, что создам простейший COM-компонент с единственным методом AddOne (одноимённая функция уже упоминалась в этой ветке) и попробую вызвать его из другой PowerBasic-программы. Если получится, значит компонент рабочий и его можно будет пробовать экспортировать в другие языки.

Цитата Сообщение от The trick Посмотреть сообщение
Регистрация не всегда нужна. Так или иначе можно избавится от регистрации.
Как я понял, если в качестве СОМ-клиента выступает PowerBasic-программа, тогда да, можно обойтись без регистрации:

LET objvar = NEWCOM CLSID ClassID$ LIB DLLPath$

PowerBASIC offers the unique ability to create and reference COM objects without any reference to the registry at all. As long as you know the CLSID (Class ID) and the file path/name of the DLL to be accessed, you can do so with no registry access at all. You don't need a special type of COM server. This technique can be used with any server, whether created by PowerBASIC or another compiler. By using this method of object creation, there is simply no need for the server to be registered at all. That allows you to keep local copies of the COM servers you use, with no chance they will be altered or replaced by another application. You use the above form, where the clause "CLSID ClassID$" identifies the 16-byte Class ID, and the clause "LIB DllPath$" identifies the file path and file name of the COM Server. Once you've obtained the COM object reference in objvar, it is used exactly as you would with a traditional object.

PowerBASIC предлагает уникальную возможность создавать COM-объекты и ссылаться на них без какой-либо ссылки на реестр. Если вы знаете CLSID (идентификатор класса) и путь/имя файла DLL, к которому нужно получить доступ, вы можете сделать это вообще без доступа к реестру. Вам не нужен специальный тип COM-сервера. Этот метод можно использовать с любым сервером, созданным с помощью PowerBASIC или другого компилятора. При использовании этого метода создания объектов сервер просто не нужно регистрировать вообще. Это позволяет вам хранить локальные копии используемых вами COM-серверов, исключая вероятность того, что они будут изменены или заменены другим приложением. Вы используете приведенную выше форму, где предложение «CLSID ClassID$» определяет 16-байтовый идентификатор класса, а предложение «LIB DllPath$» определяет путь к файлу и имя файла COM-сервера. Как только вы получите ссылку на COM-объект в objvar, он будет использоваться точно так же, как и в случае с традиционным объектом.
Но если в качестве "принимающей стороны" задействован другой ЯП, тогда это уже зависит от возможностей того языка. Судя по процитированному тексту, такая возможность имеется далеко не везде, а иначе бы они её не называли "уникальной".
Хотя это может быть написано просто для красного словца. Что-то вроде рекламы

Цитата Сообщение от locm Посмотреть сообщение
Попробуйте вывести в окно. Узнаете как в FreeBasic работать с окнами и сравните с PowerBasic.
Да не, я пока с консолью поэкспериментирую, в графический интерфейс пока не буду вдаваться.
Но там, по идее, должно быть не сложно. Везде же дизайнеры форм. Создать окно не проблема, текстбокс с полосами прокрутки и с wordwrap-ом на форме разместить тоже не проблема. Код автоматически напишется.
Ну а дальше:

PowerBasic
PureBasic
1
CONTROL SET TEXT hDlg, id&, txt$
Думаю, что во фрибейсике будет что-то похожее. Неужели там для простого вывода текста в текстбокс тоже придётся вызывать сторонние функции?!

На самом деле, я сейчас краем глаза посматриваю и на PureBasic тоже. Немного пугает, что там, как я понял, совсем нет ООП. Вместо объектов там вроде бы модули. Как я понимаю, главное назначение у объектов и у модулей одинаковый, - инкапсуляция.

Не то чтобы я был такой уж страстный поклонник ООП. Раньше меня это отпугивало. Но со временем вроде бы "притерпелся"
Класс такой-то, интерфейс такой-то, ну а дальше всё как обычно, но только процедуры обзывают "методами", а переменные "свойствами"

А кстати, интересно, в PureBasic экспортировать COM-компонент из PowerBasic'а получится?
Вроде бы должно получится. Там же уже не в виде объектов будет передаваться, а в виде нативного кода.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Но не будем об этом в этой теме, ведь бэйсик наше всё.
Не будем
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,011
Записей в блоге: 7
15.11.2022, 16:17
Цитата Сообщение от Power_Basic Посмотреть сообщение
Думаю, что во фрибейсике будет что-то похожее.
В FreeBasic WinAPI. Очень много всего на WinAPI.
Я не зря писал что FreeBasic такой же хардкорный как Си.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Немного пугает, что там, как я понял, совсем нет ООП
Это всего лишь один из методов разработки без которого можно обойтись.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Вместо объектов там вроде бы модули.
Модули это пространства имен.

Цитата Сообщение от Power_Basic Посмотреть сообщение
в PureBasic экспортировать COM-компонент из PowerBasic'а получится?
Через WinAPI, DispHelper или COMatePlus Работа с книгой Excel
Встроенных средств нет (не считая интерфейсов), потому что COM только в Windows. В Linux и MacOS X его нет.
1
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
15.11.2022, 17:24
Цитата Сообщение от Power_Basic Посмотреть сообщение
Но если в качестве "принимающей стороны" задействован другой ЯП, тогда это уже зависит от возможностей того языка. Судя по процитированному тексту, такая возможность имеется далеко не везде, а иначе бы они её не называли "уникальной".
Регистрация нужна в основном для поиска библиотеки и получения информации об объекте. Объект может быть создан вообще любым способом. Также Windows предоставляет механизм контекстов-активации с помощью которых можно задать информацию о COM библиотеках без регистрации в реестре (см. reg-free манифесты). На объект также можно сослаться с помощью моникера, в этом случае экземпляр класса может находится вообще на другом компьютере. in-proc сервер также можно сделать out-of-proc используя встроенный механимз DllSurrogate. В этом случае DLL будет загружена в свой процесс (dllhost) и ее можно использовать из приложений любой разрядности.
1
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,668
Записей в блоге: 2
15.11.2022, 17:27
Вопрос ч-ка, тупого в библиотекахи и библиоведении вообще.
1) Можно ли в каком либо Бейсике подключить библиотеку так, чтобы стали доступны все функции, как свои?
2) То что в VB подключается через референсы это все COM-овское?
3) Может ли COM библиотека также быть "процедурной"?

Добавлено через 2 минуты
Цитата Сообщение от locm Посмотреть сообщение
потому что COM только в Windows. В Linux и MacOS X его нет.
Интересно, там наверное свои какие-то подобные приколы?
1
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
15.11.2022, 17:30
Цитата Сообщение от testuser2 Посмотреть сообщение
Можно ли в каком либо Бейсике подключить библиотеку так, чтобы стали доступны все функции, как свои?
Что значит - "как свои?"

Цитата Сообщение от testuser2 Посмотреть сообщение
То что в VB подключается через референсы это все COM-овское?
Нет. Подкючаются библиотеки типов, а там могут быть и COMовские интерфейсы, классы и т.п. так и обычные структуры, "плоские" функции, константы и т.п.

Цитата Сообщение от testuser2 Посмотреть сообщение
Может ли COM библиотека также быть "процедурной"?
Может. COM библиотека сама является обычной процедурной DLL.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2022, 17:30

Лабораторная работа на изучение основ работы с debug.exe
Ход работы 1. Запишите в отчет тему и цель. 2. В командной строке наберите debug. У вас должно появиться на экране окно отладчика с...

Лабораторная работа(Изучение основ.Одномерный и двумерный массивы.Процессы)
Ребята, помогите с задачами, дали написать задачи на VBA (ни разу с ним не имел дела), первые 3 задачи делал на python'e может быть Вы...

Проблема с Imagelist в PowerBasic 10
Я хочу в ресурс вставить одно растровое изображение. Затем с помощью графических команд вырезать кусочки в память и добавлять их в...

FreeBASIC
Заметил, что уже имеющиеся на форуме темы в разделах: - QBasic - Visual Basic - VBA - Pure Basic посещаются довольно часто –...

Уйти с freebasic
написал кое как программу с openCL на freebasic там моделируется взfвимодействие частиц через потенциал парного взаимодейстивия ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru