Читаем Язык программирования Euphoria. Справочное руководство полностью

Вы можете установить столько "обратных" подпрограмм, сколько вам нужно, но все они должны быть Euphoria-функциями (или типами) с числом аргументов от 0 до 9. Если ваша подпрограмма не расчитана на выдачу какого-то результата (являлась бы фактически процедурой), просто (скажем так) задайте return 0, а вызывающая функция Си может игнорировать результат.

Когда ваша подпрограмма вызвана, все аргументы будут 32-битными числами без знака (положительными), поэтому вы должны объявить каждый аргумент в вашей подпрограмме как atom, независимо от вашего желания устроить более жесткий контроль. Ваша подпрограмма должна выдавать 32-битную целочисленную величину.

Вы можете также использовать адрес обратного вызова, чтобы задать подпрограмму Euphoria в качестве обработчика исключения в функции signal() под Linux/FreeBSD, когда, например, вам необходимо принять сигнал SIGTERM и произвести аккуратное завершение вашей программы. Да, действительно, иногда некоторые серверы Web выдают сигнал SIGTERM тому процессу CGI, который захватил слишком много машинного времени, и ваша программа должна быть готовой к такому повороту событий.

Подпрограмма обратного вызова, использующая соглашение cdecl и выдающая результат с плавающей точкой, может не работать с exw. Это происходит из-за особенностей компилятора Watcom C (с ним строится exw), который в формате cdecl нестандартным образом обходится с результатами, имеющими тип с плавающей точкой.

Пример программы:

demo\win32\window.exw, demo\linux\qsort.exu

См. также:

routine_id, platform_r.htm

c_func

Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

x = c_func(i, s)

Описание:

Вызывает Си-функцию, или функцию машинного кода, или транслированную/ компилированную функцию Euphoria, имеющую идентификатор (номер) функции i. Аргумент i должен быть разрешённым номером, выданным функцией define_c_func(). Аргумент s является рядом длины n, содержащим значения аргументов занумерованной функции, где n - число аргументов, требуемых функцией номер i. В переменной x будет содержаться результат, выданный Си-функцией.

Комментарии:

Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.

Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.

Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си. В этом случае выдаваемая ею величина могла бы быть типа атом или ряд Euphoria. Но функции Си и функции машинного кода могут выдавать только целочисленные величины или, в более общем случае, атомы (числа с плавающей точкой по стандарту IEEE).

Пример:

atom user32, hwnd, ps, hdc

integer BeginPaint

-- открыть user32.dll - она содержит Си-функцию BeginPaint

user32 = open_dll("user32.dll")

-- Си-функция BeginPaint принимает аргументы типа C int и

-- типа C pointer, и выдаёт величину типа C int в качестве результата:

BeginPaint = define_c_func(user32, "BeginPaint",

{C_INT, C_POINTER}, C_INT)

-- вызвать BeginPaint, подавая hwnd и ps в качестве аргументов,

-- присвоить результат hdc:

hdc = c_func(BeginPaint, {hwnd, ps})

См. также:

c_proc, define_c_func, open_dll, platform_r.htm

c_proc

Платформа:

WIN32, Linux, FreeBSD

Синтаксис:

c_proc(i, s)

Описание:

Вызывает Си-функцию или процедуру машинного кода, используя идентификатор (номер) процедуры i. Аргумент i должен быть разрешенным идентификатором процедуры, выданным функцией define_c_proc(). Аргумент s является рядом длины n, содержащим величины аргументов вызываемой Си-функции (процедуры), где n - число аргументов, требуемых Си-функцией (процедурой).

Комментарии:

Если Си-функция не требует подачи никаких аргументов, тогда ряд s должен быть пустым рядом {}.

Если в качестве аргумента вы подаёте величину, которая содержит дробную часть, в то время как Си-функция ожидает целочисленный тип Си, аргумент будет округлен в сторону нуля, т.е. 5.9 будет подано как 5, а -5.9 будет подано как -5.

Функция Си может входить в состав библиотеки .dll или .so, созданной транслятором с Euphoria на Си.

Пример:

atom user32, hwnd, rect

integer GetClientRect

-- открыть user32.dll - здесь содержится Си-функция GetClientRect

user32 = open_dll("user32.dll")

Перейти на страницу:

Все книги серии Euphoria

Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных