• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Присоединяйтесь к совместному написанию программы!

  • Автор темы gerich
  • Дата начала
G

gerich

Вобщем я предлагаю написать программу для расширения возможностей любого приложения.
Отдалённо это будет напоминать язык программирования, или точнее макросы в Word и Excel.
Смысл такой.
Представим себе некоторый текстовый редактор. Разработчик программы хочет, чтобы она не оставалась монолитной, и пользователь мог бы, к примеру, добавить в неё новую функцию. Тогда он создаёт в нашей проге специальный файл, после чего он может назначить этот файл в качестве реакции на нажатие какой-либо кнопки.

Таким образом придётся создать сразу две части этого приложения: программа для создания таких файлов и ActiveX DLL-ку, которая эти файлы будет выполнять.

Поскольку маловероятно, что мы можем предугадать всё, что потребуется конечному пользователю, то неплохо было бы сделать возможность расширения программы.
Моё решение этой проблемы такое.
Вся программа состоит из нескольких DLL библиотек.
В главной библиотеке определяются все общие классы, которые могут быть использованы другими частями программы.
Вот они:
Класс Document. В нём содержатся все объекты. Он как раз и представляет собой эту новую функция, которая добавляется к текстовому редактору. У этого класса есть свойства Objects(список всех объектов, которые содержатся в Document) и Value(значение, которое возвращается Document) и методы Run(вызывает стартовый оператор) и Save(сохранение)
Класс Object. От этого класса наследуются Document, Value и Operator. Он может быть сохранён и загружен из файла методами Load, Save.
Класс Value. Имеет свойство Value, которое возвращает определённое значение. От этого класса унаследованы классы, которые реализуют функции, например функция sin может быть представлена классом, у которого есть свойство Angle(угол) и переопределённое свойство Value, которое возвращает синус этого угла.
Класс Operator. В нём определённое действие. Это аналог процедуры в языках программирования. Метод Run запускает оператор на выполнение.

Я искренне надеюсь, что найдутся программисты-энтузиасты, которые захотят ко мне присоединиться.
:eek:
 
G

Gamlet

А зачем тебе это? Вообще я могу поучавствовать. У меня есть проэктик, там это можно использовать. :eek:
 
N

Normann

Блин, неужели ты и в правду собрался это на бейсике писать?
 
G

Gamlet

Ну мне вообще такой размах не нужен. Я бы написал свой текстовый редактор и встроил туда такую функцию. А такое писать я сам не понимаю зачем. :eek:
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Eclipse PDE имхо эталонная реализация расширяемости. смотрим, учимся, а потом еще раз думаем, чтоит ли браться за столь объемный проект.
 
S

Seva

Идея, в общем, понятна... но, как уже не раз говорилось- это кому-то будет нужно? в любом случае помочь чем смогу не против!
 
A

Azrael

Вобщем я предлагаю написать программу для расширения возможностей любого приложения.
Отдельный программный модуль для программистов с целью прикрутки к существующим приложениям?
Тогда уж лучше, наверное, на Java, либо .NET ?
 
G

gerich

Я хочу сделать удобную для программистов библиотеку. Я описал довольно-таки узкую сферу применения проги. Это не обязательно какая-то новая функция к программе. Это ещё и короткий код и(или) более понятный код.
Я уже пробовал делать нечто подобное.

Пусть у нас есть форма, на которой кнопка(cmdCicl).
И есть действие при нажатии
Код:
Private Sub cmdCicl_Click()
Dim i As Long
Dim j As Long
For i=1 To 10
For j=1 To 10
MsgBox i*j
Next j
Next i
End Sub

Тогда при использовании нашей DLL Это превратится примерно в следующее
Код:
Private Doc As Document

Private Sub Form_Load()
Dim Low As LongNumber
Dim Up As LongNumber
Dim I As LongNumber
Dim J As LongNumber 
Dim Step As LongNumber 
Set Doc = CreateEmptyDoc			  'Создать док и добавить его в свой же список объектов
Doc.Active=True							  'Чтобы все новые объекты записывались в этот док
Set I = CreateEmptyLongNumber	  'Создать пустое число и добавить его в текущий док
Set J = CreateEmptyLongNumber
Set Low = CreateLongNumber(1)		'Создать заданное число и добавить его в текущий док
Set Up = CreateLongNumber(100)
Set Step = CreateLongNumber(1) 
'Стартовый оператор
Doc.StartOperator=Cicle(I, Low, Up, Step, Cicle(J, Low, Up, Step, CreateMsgBox(CreateMult(I,J))))
End Sub

Private Sub cmdCicl_Click()
Doc.Run 'запуск дока
End Sub

Поскольку это только пример, то не обращайте на его громоздкость.

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

Сегодня часа в три дня или вечером я ещё чё-нибудь напишу-а вы задавайте вопросы и давайте комментарии и пожелания
 
G

gerich

Вот, как и обещал, выкладываю свою работу . Это ядро проги.
Проект не полный. Запускать не пытайтесь. Просто повнимательнее почитайте код. Там много коментов

Для создания полноценной программы надо добавить к этому ядру множество новых библиотек
В каждой из них будут находиться классы, которые будут потомками основных классов TObject, TValue или TOperator.
Пример отношений между классами смотри в прикреплённом файле structura.GIF

Для передачи параметров функциям достаточно назначить значениям полей функции соответсвующие объекты
 

Вложения

  • structura.GIF
    structura.GIF
    3,4 КБ · Просмотры: 254
P

Pasha

Для: gerich
Никак не могу понять, в чем же смысл мегаразработки. С какой стати программисту для добавления новой функции в, скажем, текстовый редактор, не вписать ее в редактор напрямую. Может быть не в сам редактор, а в какой-то плагин для него. Практически для всех платформ существуют стандартные подходы к написанию плагинов, например и для .net (и VB.NET). Зачем изобретать велосипед, да еще и реализовавать его на вымирающем 6-м VB?
 
G

gerich

На VB6 - потому что я на нём лучше всего. А зачем - мне хочется что-то делать а не просто сидеть в форуме и читать чужие сообщения

И ещё я бы хотел, чтобы продвинутые пользователи программ могли бы делать свои функции.
А как?
По-моему, в форме языка программирования это никому не надо.
Поэтому лучше было бы всё представить в форме графа, где каждая вершина-оператор или значение, а линии, соединяющие их - назначали бы параметры объектов
Если непонятно - сейчас картинку нарисую
 
G

gerich

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

Вложения

  • example.GIF
    example.GIF
    4,2 КБ · Просмотры: 561
P

Pasha

Для: gerich
Очень хочется рисовать код в виде диаграмм и вызывать прямо из этих диаграмм методы в подключаемых dll? Тогда может быть стоит посмотреть в сторону ( , )?
 
G

gerich

А мне всё равно хочется это делать и мне всё на этом не отговаривайте!!! :(
 
P

Pasha

Для: gerich
Да никто не отговаривает, просто предлагаю изучить другие решения той же проблемы.
 
G

Gamlet

Никто не отговаривает. Я лично пытаюсь понять-зачем это надо? Может проще втавить в текстовик фунций побольше и сделать невизуальной средой разработки. Новый язык на такой основе-очень даже интересгая мысль. Я так думаю. <_< ВБ6 изживается. Немногоие хорошие праграмисты пишут именно на нем. Ели создать такой упрошенный язык-он может стать популярным. :)
 
P

Pasha

Для: Gamlet
VSTA позволяет прикрутить к своему приложению поддержку макросов. Примерно так, как это сделано в Word/Excel, с кнопочками Record/Run/Edit. Куда уж упрощенее.
Он конечно платный, но это не мешает разобратся в нем и украсть идею.
 
G

gerich

Gamlet, я конечно чуток тупенький(я начинающий программюга), потому что не понял, что ты имел ввиду по "сделать невизуальной средой разработки". Объясни по новой.

Pasha, а чё такое VSTA?

Да и кстати мой кто-нибудь смотрел? А то я мучался, полдня его переписывал занова и комментировал - обидно, если всё зря делал :unsure:
 
P

Pasha

Для: gerich
Visual Studio Tools for Applications, чуть выше была ссылка.
 
G

Gamlet

Для: gerich
Есть 2 варианта.
1.Делать ехе"ШНИК. Где-то видел такой исходник. Только не помню. Но это не лучший вариант.
2.Знаешь язык Там вообще нет ехе. Там делферон мащина. И файла со воеобразнами командами для нее. Но мне нравится больше идея следующая:
Есть папка с прогой. Там есть файл ехе (допустим его имя будет Прога.ехе, или любое другое он не меняется.Своеобразная машина впапке с прогой) и файл (мне нравится им config) в котором хранятся инструкции-команды. + естественно ресурсы(рисунки и т.д.) :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!