Я пишу библиотеку Chicken Scheme, которую в конечном итоге можно будет использовать из кода C.Для этого я определяю точку входа my_entrypoint
из своего кода схемы.my_entrypoint
принимает обратный вызов C, который выполняет вычисления:
(define-external (my_entrypoint ((function void (void)) compute)) void
(let ([x (compute)])
...))
(return-to-host)
Как я могу адаптировать строку 2, чтобы моя библиотека собиралась и работала правильно.Мой код аварийно завершает работу со следующим журналом ошибок:
$ ./test
Error: call of non-procedure: #<pointer 0x10f47fb75>
Call history:
test.scm:5: return-to-host
test.scm:2: compute
Вот пример программы на C, которая использует мою библиотеку:
#include <chicken.h>
int compute_something(void)
{
return 42;
}
void my_entrypoint(void (*)(void));
int main()
{
C_word k = CHICKEN_run(C_toplevel);
(void)k;
my_entrypoint(&compute_something);
return 0;
}