Sax Basic - VBA подобный движок для ваших программ

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 13.03.2012 (Вт) 21:22

Наткнулся вот на такое чудо: Sax Basic Engine Enterprise 6.4.59
Полноценный VBA движок, который можно встроить в VB приложение. Размером всего около 2 мбайт!
При этом есть IDE среда, референс для добавления ссылок на ActiveX DLL, дебаггер и даже простой дизайнер форм!

Изображение

Сразу видно, что эта полноценная среда программирования и отладки намного мощнее любого движка на VBScript.
Но самый главный минус - отсутствие какой-либо информации в сети. Нет ни форумов, ни хелпа по интеграции. Через гугл находится только несколько ссылок с упоминанием этого скриптового движка. Попытка внедрить его в довольно тяжелый VB проект, окончился фиаско.
IDE среда Sax basica глючит, не работает меню и т.д. Походу что-то делаю неправильно. В дистрибутиве нет хелпа, только VB примеры.
И они все почему-то ActiveX EXE! Непонятно, что этим хотели сказать разработчики, что Sax Basic можно подключить к своему проекту только в виде ActiveX EXE сервера? Довольно странное решение для скриптинга.
Если кто-то занимался Sax Basic`ом предлагаю обменятся опытом по его запуску в VB6

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 13.03.2012 (Вт) 22:27

И они все почему-то ActiveX EXE! Непонятно, что этим хотели сказать разработчики, что Sax Basic можно подключить к своему проекту только в виде ActiveX EXE сервера? Довольно странное решение для скриптинга.
Судя по описанию, это уже не просто скриптинг, а интерпретэйтинг и отладинг. Что характерно, VBA тоже можно встроить только в ActiveX exe. В VBA SDK дается этому некоторое объяснение.
IDE среда Sax basica глючит, не работает меню и т.д.
В баню. VBA все еще можно завести под семеркой, а ему конкурентов в соответствующем сегменте никогда не было, и данный прожект тоже конкурировать не способен. VBA у меня начал глючить лишь когда я попытался встроить его в ocx. Или обучить многопоточности.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 13.03.2012 (Вт) 22:35

Antonariy писал(а):Что характерно, VBA тоже можно встроить только в ActiveX exe. В VBA SDK дается этому некоторое объяснение.


Но почему в Activex EXE? Первый раз с такой странной архитектурой сталкиваюсь. Интеграция с приложением через задницу получается.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 13.03.2012 (Вт) 22:44

jangle, а чем тебя для твоих целей не устраивает VBScript? И если чем то не устраивает, то чем тебя не устраивает VB?

Зачем тебе VBA?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 13.03.2012 (Вт) 22:48

jangle писал(а):Интеграция с приложением через задницу получается.
Через задницу твое восприятие действительности, я извиняюсь. Хочешь интерпретатор в своем приложении — делай AxtiveX exe. Хочешь standart exe — рассчитывай только на скриптинг. Это требование, а не глюк.

В VBA SDK дается этому некоторое объяснение.
Поднял это "объяснение":
A Visual Basic executable can be either a standard EXE or an ActiveX EXE. The difference is an ActiveX EXE registers itself as an out-of-process component, making it possible for the application to expose creatable public classes. Because your host application exposes a set of objects, it must be an ActiveX EXE.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 13.03.2012 (Вт) 22:59

Хакер писал(а):jangle, а чем тебя для твоих целей не устраивает VBScript? И если чем то не устраивает, то чем тебя не устраивает VB?

Зачем тебе VBA?


Примитивность VBScript не устраивает, расширяемость только за счет классов приложения. Отсутствие редактора и отладчика.
VBA удобней тем, что имея карскас приложения все остальное можно дописать на VBA и Win32API по-необходимости, сохранив скрипты в БД и меняя конфигурацию приложения на лету

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 13.03.2012 (Вт) 23:05

расширяемость только за счет классов приложения
Во-первых, не только классами приложения, но и всем COM'ом, во-вторых, VBA этом плане отличается мало.
VBA удобней тем, что имея карскас приложения все остальное можно дописать на VBA и Win32API по-необходимости, сохранив скрипты в БД и меняя конфигурацию приложения на лету
Исключая Win32API, все остальное является преимуществом лишь в том случае, если дописыванием будут заниматься пользователи. Если же они будут просить дописать тебя, то никакого преимущества перед VBScript нет.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 14.03.2012 (Ср) 10:25

Нет, вынос движка в ActiveX EXE это очень неудобно. Мне же нужно автоматизировать объектную модель моего приложения. Что мне теперь делать ее вторую копию в ActiveX EXE? Перетащить туда два десятка классов, кучу модулей и форм. Там же много связей с разными кусками проекта, чтобы это сделать нужно сделать масштабный рефакторинг кода. Что-то они тут непродумали.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 14.03.2012 (Ср) 10:47

Это ТЫ что-то не продумал. Если бы автоматизация была частью тз, а не внезапным капризом, вопроса удобно-неудобно не стояло бы.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 14.03.2012 (Ср) 11:04

Antonariy писал(а):Это ТЫ что-то не продумал. Если бы автоматизация была частью тз, а не внезапным капризом, вопроса удобно-неудобно не стояло бы.


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

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 14.03.2012 (Ср) 12:36

Я все это говорю потому что делал автоматизацию не раз и не два. А ты ни разу. {--Вырезано.--}

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

И с чего ты решил, что автоматизацию подключает человек, стоявший у истоков проекта.
Человек, стоящий у истоков проекта, ее планирует. Очевидно, что он ее не планировал, и вообще планировал приложение {--плохо--}, раз ты придумал себе необходимость VBA-автоматизации.
То что ты задумал, это костыль в виде фабрики для производства костылей.

Нафига автоматизация в проекте с одной формой?
Именно в проектах из одной формы (там почему-то сейчас каша из трех тем: VBTC, HTMLSpy и XMLVisualiser. Хакер опять базу из{--портил--}) и раскрываются все преимущества VBA. На одной форме можно отобразить все что угодно, а что не угодно, сделать на VBA. На одной из сотни форм только то, для чего она предназначена, и VBA там делать нечего потому что все делает сама форма. Из скриншота видно, что я имею ввиду.

vba_automation.gif
(142.76 Кб) Скачиваний: 314


[Хакер] :: Antonariy, веди себя культурно и воздержись от фекальномочеполовой лексики в постах.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Antonariy » 14.03.2012 (Ср) 14:10

Затиралка работает как сумашедшая
[Хакер] :: Больше не потребуется.
Да ну? Another fail.
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 14.03.2012 (Ср) 17:19

Не могу понять, почему не приходит событие из ActiveX EXE? :?:
При закрытии ActiveX EXE должно приходить событие unloadIDE
В этом классе оно происходит, но в приложении, которое использует Activex EXE события нет.
Хотя среда разработки VB показывает этот event


ActiveX EXE
Код: Выделить всё
'Класс Application
Public Event unloadIDE(ByVal CODE As String)

Private Sub Class_Terminate()
  RaiseEvent unloadIDE("HELLO")
End Sub



Основное приложение
Код: Выделить всё
Dim WithEvents Script  As Script.Application

Private Sub Form_Load()
Set Script= New Script.Application
End Sub


Private Sub  Script_unloadIDE(ByVal code As String)
MsgBox code
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 14.03.2012 (Ср) 18:21

Потому что ты не понимаешь логику работы.

Ты генерируешь событие unloadIDE в событии Class_Terminate.
Но Class_Terminate происходит тогда, когда экземпляр уничтожается. А экземпляр уничтожается тогда, когда на него не осталось ни одной ссылки.

А когда на экземпляр не осталось ни одной ссылки, значит и переменная WithEvents Script к этому моменту содержит Nothing (в противном случае экземпляр бы не уничтожался, а жил). А раз Script содержит Nothing, то подписки на события умирающего объекта уже нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 15:56

Хакер писал(а):Потому что ты не понимаешь логику работы.


Наверное нет. Событие из ActiveX не приходит в любом случае. Даже если просто кликнуть там кнопку на форме и сгенерить
Код: Выделить всё
RaiseEvent unloadIDE("HELLO")
. В основном приложении событие не происходит, хотя оно видно в Object Broswer
Безымянный.PNG
Безымянный.PNG (1.99 Кб) Просмотров: 9498

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 15.03.2012 (Чт) 15:57

Объяси ситуацию.
Ты создал пустой тестовый ActiveX EXE и пустой тестовый Standard EXE и на них эксперементируешь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 16:12

Хакер писал(а):Объяси ситуацию.
Ты создал пустой тестовый ActiveX EXE и пустой тестовый Standard EXE и на них эксперементируешь?


да тестовый Standard EXE, в референсах ссылка на ActiveX EXE

Код: Выделить всё
Option Explicit
Dim WithEvents SAX_BASIC As SAX_BASIC.Application
 
Private Sub Form_Load()
  Set SAX_BASIC = New SAX_BASIC.Application
End Sub

Private Sub SAX_BASIC_unloadIDE(CODE As String)
MsgBox CODE
End Sub


тестовый ActiveX EXE

Form1
Код: Выделить всё
Option Explicit
Private Application As New Application

Private Sub Command1_Click()
  Application.closeApp
End Sub


класс Application

Код: Выделить всё
Option Explicit
Public Event unloadIDE(CODE As String)

Public Sub closeApp()
  RaiseEvent unloadIDE("hello")
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 15.03.2012 (Чт) 16:43

Ну и чему ты удивляешься :!: .

Standard EXE — хост.
ActiveX EXE — сервер.

У хосте ты создаёшь первый экземпляр класса Application, вот здесь: Set SAX_BASIC = New SAX_BASIC.Application
В сервере ты создаёшь второй экземпляр класса Application, вот здесь: Application.closeApp

Хост подписан на события первого экземпляра.
Нажатие кнопки вынуждает генерацию события от имени второго экземпляра.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 16:54

Да у меня было подозрение на счет двух экземпляров.
Но как я вызову
Код: Выделить всё
Application.closeApp
если не создам на сервере свой экземпляр класса Application?
Как сделать чтобы на хосте был тот же экземпляр что и у сервера?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 15.03.2012 (Чт) 16:57

jangle писал(а):если не создам на сервере свой экземпляр класса Application?

Оба экземпляра создаются «на» сервере. Но ссылка на первый есть у хоста, а ссылка на второй есть у экземпляра формы.

jangle писал(а):Как сделать чтобы на хосте был тот же экземпляр что и у сервера?

На хосте оба экземпляра. Работа с объектами в COM происходит не иначе как через ссылки. Что тебе нужно? Зачем тебе иметь два экземпляра?
Как вообще можно не понимать происходящего, всё же предельно просто?

Почему ты не можешь вызвать closeApp из хоста? Почему ты не можешь в экземпляре формы иметь ссылку не на новый экземпляр, а на тот же, который был создан по просьбе хоста?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 17:18

Хакер писал(а):Зачем тебе иметь два экземпляра?


Потому что на форме в ActiveX EXE лежит контрол SAX BASIC IDE, который живет собственной жизнью. Мне нужно чтобы этот контрол передавал в хост свои события, как я понимаю, это можно сделать вызывая события в Application, которые затем перехватит хост.

Почему ты не можешь вызвать closeApp из хоста?


Потому что его генерирует SAX BASIC IDE лежащее на форме ActiveX EXE, когда допустим закончит выполнят скрипт и захочет передать хосту результаты его работы.

Почему ты не можешь в экземпляре формы иметь ссылку не на новый экземпляр, а на тот же, который был создан по просьбе хоста?


Не пойму как это сделать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 15.03.2012 (Чт) 17:28

jangle писал(а):Потому что на форме в ActiveX EXE лежит контрол SAX BASIC IDE, который живет собственной жизнью. Мне нужно чтобы этот контрол передавал в хост свои события, как я понимаю, это можно сделать вызывая события в Application, которые затем перехватит хост.

Почему контрол лежит не в хосте, а в каком-то никому не нужном промежуточном ActveX-сервере?

jangle писал(а):Не пойму как это сделать

В Initalize класса Application ты порождаешь новый экземпляр формы и этому экземпляру формы передаёшь me, а экземпляр форму получив ссылку на родительский экземпляр Application присваивает эту ссылку WithEvents-переменной.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 17:33

Что тебе нужно?


Нужен движок Sax Basic максимально изолированный от хоста. Хост передает ему только скрипт из БД и получает от ActiveX EXE сервера результаты работы этого скрипта. Т.е. я вызываю в хосте некий экземпляр класса передаю ему в текстовой переменной скрипт, и продолжаю работу хоста, сервер в это время выполняет скрипт, и когда закончит генерирует у хоста событие, передав ему в текстовой переменной результаты работы.

Хакер писал(а):Почему контрол лежит не в хосте, а в каком-то никому не нужном промежуточном ActveX-сервере?


Проблема в том, что Sax basic глючит если в хосте используется набор GUI компонентов от CodeJock. Не уживается он с ними в одном экзешнике. Но если вынести Sax basic в ActiveX EXE то глюков естественно нет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16477
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение Хакер » 15.03.2012 (Чт) 17:35

Да откажись ты уже от этой идеи.

Ты хочешь совместить несовместимое.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Sax Basic - VBA подобный движок для ваших программ

Сообщение jangle » 15.03.2012 (Чт) 17:50

Да я уже и сам устал бороться с этим sax бейсиком, встроить vbscript будет проще.
Жаль конечно, очень мощный язык и среда разработки прикольная, но слишком много подводных камней.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList