Что нового

Вызов функции из другого файла, проблема сборки в exe

Suppir

Продвинутый
Сообщения
967
Репутация
62
Файл основной программы main.au3
Код:
#include <lib.au3>

Global $Msg

MyFunc()

Func Msg($Msg)
	MsgBox(0, "", $Msg)
EndFunc





Файл библиотеки функций lib.au3
Код:
Func MyFunc()
	Msg("Hello world")
EndFunc




1) Запускаем файл main.au3 - появляется сообщение Hello World
2) Собираем main.au3 в main.exe
3) в файле lib.au3 меняем "Hello World" на "Goodbye Lenin"

Запускаем main.exe, после чего появляется все то же самое сообщение "Hello world".

Как сделать так, чтобы после сборки основной программы в exe-шник можно было менять библиотечные функции в открытом файле lib.au3?
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
То есть сейчас в момент сборки в exe-файл все функции из подключенного lib.au3 сразу "зашиваются" в этот exe. Если мы потом поменяем что-то в открытом коде библиотеки lib.au3, то эти изменения уже никак не отобразятся в собранном exe-шнике.

Моя цель:
1) должен быть закрытый exe-шник основной программы;
2) должна быть открытая библиотека lib.au3, где юзеры могут менять код.

Как это сделать?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
http://autoit-script.ru/index.php/topic,4714.0.html
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Спасибо, буду разбираться.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Вот функция, указываеш файл... И все)
Код:
func _ReadScript($iFile)
$exec  = FileRead($iFile)
$exec = StringSplit($exec, @CRLF)
For $i = 1 To $exec[0]
    $exec[$i] = StringStripWS($exec[$i], 3)
    If ($exec[$i]) And (StringLeft($exec[$i], 1) <> ';') Then
        ConsoleWrite($exec[$i] & @CR)
        Execute($exec[$i])
    EndIf
Next
endfunc
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Ganibal95

Верится с трудом, если честно.


Добавлено:
Сообщение автоматически объединено:

Может ли кто-нибудь сабжевый пример написать?

В смысле создать exe, из которого будет вызываться функция файла lib.au3. И чтобы можно было менять эту функцию.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Заместо этого: #include <lib.au3>
поставь: _ReadScript('lib.au3')
lib.au3 - Это положи в директорию со скриптом...
Скомпили главный скрипт, измени в lib.au3
Радуйся))
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Ganibal95
Да не будет твой пример работать, имхо.
В lib может быть несколько функций. Их нужно вызывать (возможно, с параметрами) из основного скрипта, они должны возвращать результат и т.п. А у тебя просто исполняется построчно файл.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Ну как хочеш :-X
Мог бы хотя-бы проверить...
Щас на зло тебе у себя проверю!!!! :blum:


Добавлено:
Сообщение автоматически объединено:

Блин... :(
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Почитал английский форум по AutoIt. Задача нетривиальна, решается путем создания специального COM-интерфейса между главной программой и плагинами.

Т.е. перекрестный вызов функций, как к сабже, когда из скомпилированного main.exe вызывается функция из НЕскомпилированного lib.au3,
в котором, в свою очередь, используется функция Msg из main.exe труднореализуемо. :(
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Kaster
Несколько топиков нашел по данной теме.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Основная программа создает временный скрипт, который использует lib.au3, и запускает его на выполнение через собственный интерпритатор. Результат вычислений можно передовать в основную программу кучей разных способов.Только так.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Suppir [?]
Моя цель: 1) должен быть закрытый exe-шник основной программы;2) должна быть открытая библиотека lib.au3, где юзеры могут менять код.Как это сделать?
IMHO - MSScriptControl.ScriptControl.1 это то, что вам нужно.
Библиотеки можно писать как на JS, так и VBS.

P.S. Кстати, я частенько прибегаю к этому объекту ;)
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Понятно, спасибо за разъяснения.
 
Верх