如何在Julia中使用/创建更通用的ccall?

Fer*_*enc 3 c julia

我想调用一个调用ac函数的函数,但我希望能够换掉实际的C函数

function Ccall(fn)
    ... more code 1 ...    
    ccall((fn, libc), Int32, ()) 
    ... more code 2 ...
end
Run Code Online (Sandbox Code Playgroud)

其中more code部分始终是相同的,但fn可以改变.举个简单的例子,我尝试调用这个Ccall函数

f = "clock" |> Symbol
Ccall(f)
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息.也试过了

function Ccall(fn)
    ... more code 1 ...    
    ccall(fn, Int32, ()) 
    ... more code 2 ...
end
Run Code Online (Sandbox Code Playgroud)

const f = ("clock" |> Symbol, "libc")
Ccall(f)
Run Code Online (Sandbox Code Playgroud)

但没有运气,f不是一个恒定的表达,应该是什么,只是因为我放在const前面.

有没有一种方法可以使用上述通用性?如果是这样,怎么样?

tho*_*oly 5

ccall需要一个表达式,而不是一个值 - 在这方面它有点像一个宏.您可以生成适当的表达式(请参阅HDF5.jl包中的一个示例),但最好的办法是根据Gnimuc Key建议为每个C函数创建一个包装函数.