我尝试按照文档(https://docs.julialang.org/en/v1/manual/embedding/index.html)中的说明嵌入Julia,但无法使其与chars一起使用。我可能必须缺少一些基本知识。
当我运行以下代码
jl_function_t *func = jl_get_function(jl_base_module, "uppercase");
char const *julia = "julia";
jl_value_t *argument = jl_box_char(*julia);
jl_value_t *ret = jl_call1(func, argument);
const char *unboxed = jl_string_ptr(ret);
// expecting "JULIA", getting an empty string
未装箱的变量返回空。 jl_box_char似乎期望使用指针,因为其参数必须为uint32_t(https://github.com/JuliaLang/julia/blob/24f1316e91de029f71f636db23aced49156b44ad/src/julia.h#L1182)。
请注意,在调用时,字符已正确拆箱:
jl_value_t *ret = jl_eval_string("uppercase(\"julia\")");
const char *unboxed = jl_string_ptr(ret);
任何的想法?谢谢。
最佳答案
答案由@molbdnilo找到。以下作品:
jl_function_t *func = jl_get_function(jl_base_module, "uppercase");
char const *julia = "julia";
jl_value_t *argument = jl_cstr_to_string(julia);
jl_value_t *ret = jl_call1(func, argument);
const char *unboxed = jl_string_ptr(ret); // expecting "JULIA", getting "JULIA"