Страница 1 из 1

Внешняя функция

СообщениеДобавлено: 21 мар 2016, 12:09
Владимир_Я
Хочу создать функцию типа

sub func(short source,short result)
result=source
end sub

В таком виде не работает. Как сделать подобную функцию?

Re: Внешняя функция

СообщениеДобавлено: 21 мар 2016, 12:34
den_po
Что значит не работает?
При редактировании макроса функцию нужно разместить до тела макроса, сам макрос при этом удалять нельзя.
Если нужно глобальную функцию, то Инструменты/Макросы/Библиотека/Создать.

Re: Внешняя функция

СообщениеДобавлено: 21 мар 2016, 12:44
Владимир_Я
Да, для примера создал функцию в библиотеке

sub Proverka(int a, int b)
b=a
end sub

и создал макрос

macro_command main()

int a,b
a=7
Proverka(a, b)
SetData(b, "Local HMI", LW, 0, 1)

end macro_command

после выполнения макроса LW0 не изменяется

Re: Внешняя функция

СообщениеДобавлено: 21 мар 2016, 12:58
den_po
Используйте return

Код: Выделить всё
sub unsigned int mylongswap(unsigned int param)
unsigned int result
SWAPB(param, result)
return result
end sub

macro_command main()
unsigned int a,b
a=0x1234
b=mylongswap(a)
SetData(b, "Local HMI", LW, 0, 1)
end macro_command

Re: Внешняя функция

СообщениеДобавлено: 21 мар 2016, 13:07
Владимир_Я
С объявлением типа функции и return-ом это конечно работает. Но как сделать чтобы значение возвращалось в передаваемую переменную? Стандартные функции же сделаны так.
Например тот же SWAPB(param, result).
Свою функцию Proverka я просто привёл для примера. На самом деле хочу передавать в функцию массив, модифицировать его в функции, и возвращать.

Re: Внешняя функция

СообщениеДобавлено: 22 мар 2016, 11:31
den_po
Пользовательским функциям нельзя передавать массивы в аргументах

Re: Внешняя функция

СообщениеДобавлено: 22 мар 2016, 11:55
Владимир_Я
Обидно. Почему то в памяти моей отразилось, что можно. Придётся циклом закидывать.