请问高手:jl_get_function如何获取一个自编的模块中的函数指针???


#1

在c++中调用julia函数,官方例子中给出的是调用Base包中的函数,在调用jl_get_function函数时,第一个参数是jl_base_module
jl_init();
jl_function_t *func = jl_get_function(jl_base_module, “sqrt”);
jl_value_t *argument = jl_box_float64(2.0);
jl_value_t *ret = jl_call1(func, argument);
if (jl_typeis(ret,jl_float64_type)) {
double ret_unboxed = jl_unbox_float64(ret);
printf(“sqrt(2.0) in C: %e \n”, ret_unboxed);
}
如果我自己编写了一个module,如下:我如何通过jl_get_function获取testModule中的testfun函数指针???谢谢!
module testModule
export testfun

function testfun()
println(“Test \n”)
end


#2

win 10 懒得配环境了,你就多试试,有问题附上报错。
另外也可以在 REPL 里尝试使用 julia 的 C-API:
ccall(:jl_eval_string, Ptr{Cvoid},(Ptr{Cchar},),"Random.randstring") 返回函数指针非 0 即成功。

C 中获取其他模块内函数的方法:

  • jl_value_t * my_testfun = jl_eval_string("testModule.testfun")
    这样应该是最方便的 可能还需要 jl_eval_string("import testModule")
  • jl_function_t *func = jl_get_function((jl_module_t *)jl_eval_string("testModule"), "testfun");

ref:


#3

谢谢woclass兄!我试试。