【发布时间】:2019-07-04 05:49:09
【问题描述】:
通过引用调用从 Julia 调用 C 函数的正确方法是什么?
我正在尝试使用来自 Julia 的 ccall 调用 C 函数,该函数将其输出作为指针。
所以 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(或Linux 上的.so)编译并在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 中使用此类 C 函数的正确方法是什么?
Julia 文档中有 ccall (https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/index.html) 的示例,但始终使用数组作为返回数据。
当然,我也可以将我的i 声明为大小为 1 的数组。然后一切都按预期工作。
【问题讨论】: