Что нового

Вызов функции из другого файла, проблема сборки в 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
Репутация
622
http://autoit-script.ru/index.php/topic,4714.0.html
 
Автор
S

Suppir

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

Ganibal95

GreenBytes
Сообщения
876
Репутация
239
Вот функция, указываеш файл... И все)
Код:
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
Сообщения
876
Репутация
239
Заместо этого: #include <lib.au3>
поставь: _ReadScript('lib.au3')
lib.au3 - Это положи в директорию со скриптом...
Скомпили главный скрипт, измени в lib.au3
Радуйся))
 
Автор
S

Suppir

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

Ganibal95

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


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

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

Suppir

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

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

Suppir

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

Yashied

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

Garrett

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

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

Suppir

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