Судя по описанию, это уже не просто скриптинг, а интерпретэйтинг и отладинг. Что характерно, VBA тоже можно встроить только в ActiveX exe. В VBA SDK дается этому некоторое объяснение.И они все почему-то ActiveX EXE! Непонятно, что этим хотели сказать разработчики, что Sax Basic можно подключить к своему проекту только в виде ActiveX EXE сервера? Довольно странное решение для скриптинга.
В баню. VBA все еще можно завести под семеркой, а ему конкурентов в соответствующем сегменте никогда не было, и данный прожект тоже конкурировать не способен. VBA у меня начал глючить лишь когда я попытался встроить его в ocx. Или обучить многопоточности.IDE среда Sax basica глючит, не работает меню и т.д.
Antonariy писал(а):Что характерно, VBA тоже можно встроить только в ActiveX exe. В VBA SDK дается этому некоторое объяснение.
Через задницу твое восприятие действительности, я извиняюсь. Хочешь интерпретатор в своем приложении — делай AxtiveX exe. Хочешь standart exe — рассчитывай только на скриптинг. Это требование, а не глюк.jangle писал(а):Интеграция с приложением через задницу получается.
Поднял это "объяснение":В 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, а чем тебя для твоих целей не устраивает VBScript? И если чем то не устраивает, то чем тебя не устраивает VB?
Зачем тебе VBA?
Во-первых, не только классами приложения, но и всем COM'ом, во-вторых, VBA этом плане отличается мало.расширяемость только за счет классов приложения
Исключая Win32API, все остальное является преимуществом лишь в том случае, если дописыванием будут заниматься пользователи. Если же они будут просить дописать тебя, то никакого преимущества перед VBScript нет.VBA удобней тем, что имея карскас приложения все остальное можно дописать на VBA и Win32API по-необходимости, сохранив скрипты в БД и меняя конфигурацию приложения на лету
Antonariy писал(а):Это ТЫ что-то не продумал. Если бы автоматизация была частью тз, а не внезапным капризом, вопроса удобно-неудобно не стояло бы.
Десятки рутинных действий уже должны быть автоматизированы кодом и интерфейсом самой программы. VBA применяется тогда, когда предполагается возможность и необходимость выполнения операций, которых еще никогда не было, но могут быть. Которые не предусмотрены рутиной.Ее подключают, когда выполнять десятки рутинных операций становится невыносимо для пользователя
Человек, стоящий у истоков проекта, ее планирует. Очевидно, что он ее не планировал, и вообще планировал приложение {--плохо--}, раз ты придумал себе необходимость VBA-автоматизации.И с чего ты решил, что автоматизацию подключает человек, стоявший у истоков проекта.
Именно в проектах из одной формы (там почему-то сейчас каша из трех тем: VBTC, HTMLSpy и XMLVisualiser. Хакер опять базу из{--портил--}) и раскрываются все преимущества VBA. На одной форме можно отобразить все что угодно, а что не угодно, сделать на VBA. На одной из сотни форм только то, для чего она предназначена, и VBA там делать нечего потому что все делает сама форма. Из скриншота видно, что я имею ввиду.Нафига автоматизация в проекте с одной формой?
'Класс 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
Хакер писал(а):Потому что ты не понимаешь логику работы.
RaiseEvent unloadIDE("HELLO")
Хакер писал(а):Объяси ситуацию.
Ты создал пустой тестовый ActiveX EXE и пустой тестовый Standard 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
Option Explicit
Private Application As New Application
Private Sub Command1_Click()
Application.closeApp
End Sub
Option Explicit
Public Event unloadIDE(CODE As String)
Public Sub closeApp()
RaiseEvent unloadIDE("hello")
End Sub
Application.closeApp
jangle писал(а):если не создам на сервере свой экземпляр класса Application?
jangle писал(а):Как сделать чтобы на хосте был тот же экземпляр что и у сервера?
Хакер писал(а):Зачем тебе иметь два экземпляра?
Почему ты не можешь вызвать closeApp из хоста?
Почему ты не можешь в экземпляре формы иметь ссылку не на новый экземпляр, а на тот же, который был создан по просьбе хоста?
jangle писал(а):Потому что на форме в ActiveX EXE лежит контрол SAX BASIC IDE, который живет собственной жизнью. Мне нужно чтобы этот контрол передавал в хост свои события, как я понимаю, это можно сделать вызывая события в Application, которые затем перехватит хост.
jangle писал(а):Не пойму как это сделать
Что тебе нужно?
Хакер писал(а):Почему контрол лежит не в хосте, а в каком-то никому не нужном промежуточном ActveX-сервере?
Сейчас этот форум просматривают: Google-бот и гости: 37