2012-03-04 5 views
4

Тривиальный вопрос, но после некоторого времени, просматривая документацию ECL, документацию CFFI и прибегая к Google, я до сих пор не смог прийти к окончательному ответу. В документах ECL ничего не говорится о синтаксисе обратного вызова, документы CFFI не упоминают никаких ограничений реализации в отношении обратных вызовов в ECL, и я не могу использовать страницы, на которые намекает Google логический.Поддерживает ли ECL обратные вызовы?

ответ

6

ECL поддерживает обратные вызовы как в интерпретируемом, так и в скомпилированном режиме. CFFI заботится обо всем для вас, поэтому нет особого упоминания о ECL (почему это должно быть?). Если вы заботитесь о фактической реализации, посмотрите на ecl/src/lsp/ffi.lsp. Подпись для FFI: DEFCALLBACK: (defmacro defcallback (имя ret-type ((arg-name arg-type) *) & body body) Иными словами, он принимает более или менее те же аргументы, что и DEF-FUNCTION (тип синтаксис тот же, UFFI), но он явно называет каждый из аргументов (arg-name) и предоставляет код в lisp для исполнения.

+0

Отрадно получить ответ от разработчика :) Я не упоминал, но при оценке CFFI: DEFCALLBACK Я получаю сообщение об ошибке «CDECL не обозначает действительного соглашения о вызове». Поэтому я начал проверять, возможны ли обратные вызовы вообще. Должна быть какая-то локальная проблема с моей установкой или программой, тогда попытайтесь выяснить. Благодарю. – Andrei

+0

Упс, возможно, вы правы. Проблема в том, что мы используем библиотеку libffi, и поэтому нет соглашения CDECL (имена меняются с платформы на платформу). Это поможет мне решить эту проблему, если вы сообщите об этом через отслеживатель ошибок ECL. Решится как можно скорее. – Juanjo

+0

Я отправил отчет об ошибке: https://sourceforge.net/tracker/?func=detail&aid=3514934&group_id=30035&atid=398053 – Andrei

Смежные вопросы