Сначала второй вопрос. Скорее всего если какие-либо ограничения и существуют, то только по производительности компьютера. Самый большой макрос, который у меня был, весил 10 МБ (уверяю Вас - это очень много), работал нормально на десятке самых разных машин, от РI до PIV, ОЗУ 128 МБ-512 МБ.
Первый вопрос. Да можно. Возможен такой вариант. Допустим у Вас в папке C:\MyProgram есть файл MyProgram.dvb, в этом файле есть модуль MyModul1 и в нем есть процедура Public Function MyFunction (ByVal var1 as String, ByVal var2 As String, ByVal var3 As Integer). Создаете в том же модуле функцию, допустим, StartMyFunction и в ней описываете:
Public Sub StartMyFunction()
Dim var1 As String
Dim var2 As String
Dim var3 As Integer
var1 = ThisDrawing.Utility.GetString(False)
var2 = ThisDrawing.Utility.GetString(False)
var3 = ThisDrawing.Utility.GetInteger
Call MyFunction(var1, var2, var3)
End Sub
После этого в любом текстовом редакторе (лучше в Блокноте) создаете Лисповский файл, допустим MyProgram.lsp. В котором пишите:
(defun MyFunction (var1 var2 var3 /)
(command
"_-vbarun" "C:/MyProgram/MyProgram.dvb!MyModul1.StartMyFunction" var1 var2 var3 pause
)
(SETQ var1 nil)
(SETQ var2 nil)
(SETQ var3 0)
(princ)
)
Если папка C:\MyProgram включена в пути поддержки АКАДа, то полный путь к файлу можно опустить. Дальше надо загрузить этот Лисповский файл (load "C:/MyProgram/MyProgram.lsp"). Можно включить его загрузку в файл acaddoc.lsp (в таком случае Ваша программа будет автоматически загружаться в любой открываемый или создаваемый чертеж). Для запуска программы в командной строке пишите: (MyFunction "Переменная 1" "Переменная 2" 2). Все.
Наверное возможны и другие варианты.