Как правильно вызвать функцию C из Julia с помощью вызова по ссылке?
Я пытаюсь вызвать функцию C из ccall
из Julia, которая получает свои выходные данные в виде указателей.
Итак, функция C должна сделать что-то вроде этого:
void plusOne(int* i){
printf("C: i = %i\n", i[0]);
i[0] = i[0]+1;
printf("C: i = %i\n", i[0]);
}
Скомпилировать ее с gcc -shared -fPIC plusOne.c -o plusOne.dll
(или .so
в Linux) и запустить в Julia:
julia> i = Int32(42)
42
julia> ccall((:plusOne, "plusOne.dll"), Cvoid, (Ref{Cint},),i)
C: i = 42
C: i = 43
julia> println("Julia: i = $i")
Julia: i = 42
Как правильно использовать такие функции Си от Юлии?В документации Julia есть примеры для ccall
(https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/index.html),, но всегда с массивами в качестве возвращаемых данных.
Конечно, я мог бы также объявить свой i
как массив размера 1. Тогда все будетработает как положено.