用法:
@ccall library.function_name(argvalue1::argtype1, ...)::returntype
@ccall function_name(argvalue1::argtype1, ...)::returntype
@ccall $function_pointer(argvalue1::argtype1, ...)::returntype
调用 C-exported 共享库中的函数,由 library.function_name
指定,其中 library
是字符串常量或文字。该库可以省略,在这种情况下,function_name
在当前进程中被解析。或者,@ccall
也可用于调用函数指针 $function_pointer
,例如由 dlsym
返回的函数指针。
通过自动插入对 unsafe_convert(argtype, cconvert(argtype, argvalue))
的调用,每个 argvalue
到 @ccall
都将转换为相应的 argtype
。 (有关更多详细信息,另请参阅
和unsafe_convert
的文档。)在大多数情况下,这只会导致调用 cconvert
convert(argtype, argvalue)
。
例子
@ccall strlen(s::Cstring)::Csize_t
这将调用 C 标准库函数:
size_t strlen(char *)
使用名为 s
的 Julia 变量。另见ccall
。
以下约定支持可变参数:
@ccall printf("%s = %d"::Cstring ; "foo"::Cstring, foo::Cint)::Cint
分号用于将必需的参数(其中必须至少有一个)与可变参数分开。
使用外部库的示例:
# C signature of g_uri_escape_string:
# char *g_uri_escape_string(const char *unescaped, const char *reserved_chars_allowed, gboolean allow_utf8);
const glib = "libglib-2.0"
@ccall glib.g_uri_escape_string(my_uri::Cstring, ":/"::Cstring, true::Cint)::Cstring
如果需要,也可以在函数名之前直接使用字符串文字 "libglib-2.0".g_uri_escape_string(...
相关用法
- Julia @cfunction用法及代码示例
- Julia @coalesce用法及代码示例
- Julia @view用法及代码示例
- Julia @isdefined用法及代码示例
- Julia @v_str用法及代码示例
- Julia @boundscheck用法及代码示例
- Julia @b_str用法及代码示例
- Julia @show用法及代码示例
- Julia @r_str用法及代码示例
- Julia @locals用法及代码示例
- Julia @raw_str用法及代码示例
- Julia @assert用法及代码示例
- Julia @views用法及代码示例
- Julia @task用法及代码示例
- Julia @something用法及代码示例
- Julia @deprecate用法及代码示例
- Julia splice!用法及代码示例
- Julia LibGit2.count用法及代码示例
- Julia LinearAlgebra.BLAS.dot用法及代码示例
- Julia break用法及代码示例
- Julia sizeof()用法及代码示例
- Julia :<=用法及代码示例
- Julia zero()用法及代码示例
- Julia rem用法及代码示例
- Julia ...用法及代码示例
注:本文由纯净天空筛选整理自julialang.org 大神的英文原创作品 Base.@ccall — Macro。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。