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

标签 c julia

我想调用一个调用 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-ing 方法?如果是这样,如何?

最佳答案

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

关于c - 如何在 Julia 中使用/创建更通用的 ccall?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879033/

相关文章:

julia - 如何创建 n 个变量的函数 (Julia)

c - "strlen(s1) - strlen(s2)"永远不会小于零

c - 实际参数的指针不匹配?

c - 从文本文件读取数字到二维数组

dataframe - 将 DataFrame 的集合组合成一个大的 DataFrame

types - julia 参数构造函数 - 外部构造函数的问题

c++ - MSVC 中的不透明指针会生成编译器错误

C: 找不到文件中定义的函数的符号?

Julia UndefVarError : subtypes not defined

julia - 错误: LoadError: UndefVarError: type not defined