我想调用一个调用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
放在前面。
有没有一种方法可以使用上述通用性?如果是这样,怎么样?
答案 0 :(得分:5)
ccall
需要一个表达式,而不是一个值 - 在这方面它有点像一个宏。您可以生成适当的表达式(请参阅HDF5.jl包中的一个示例),但最好的办法是根据Gnimuc Key建议为每个C函数创建一个包装函数。