我想调用一个调用c函数的函数,但是我想能够替换掉实际的c函数

function Ccall(fn)
    ... more code 1 ...
    ccall((fn, libc), Int32, ())
    ... more code 2 ...
end

其中more code部分始终相同,但fn可以更改。
举个简单的例子,我尝试调用这个ccall函数
f = "clock" |> Symbol
Ccall(f)

但我收到一条错误信息。也试过了
function Ccall(fn)
    ... more code 1 ...
    ccall(fn, Int32, ())
    ... more code 2 ...
end

具有
const f = ("clock" |> Symbol, "libc")
Ccall(f)

但运气不好,f不是一个常量表达式,它应该是什么,仅仅因为我把一个const放在前面。
有没有一种方法可以解决上述的普遍性问题?如果是,怎么做?

最佳答案

ccall需要一个表达式,而不是一个值——在这方面它有点像宏。您可以生成适当的表达式(请参阅hdf5.jl包中的一个示例),但您最好的选择可能是按照gnimuc key的建议为每个c函数创建一个包装函数。

08-15 22:26