小编use*_*704的帖子

将字符串从ECL传递给C++

我正试图进入嵌入在C++中的Common Lisp的迷人世界.我的问题是我无法从c ++中读取和打印由ECL中定义的lisp函数返回的字符串.

在C++中,我有这个函数来运行任意的Lisp表达式:

cl_object lisp(const std::string & call) {
    return cl_safe_eval(c_string_to_object(call.c_str()), Cnil, Cnil);
}
Run Code Online (Sandbox Code Playgroud)

可以用这种方式用数字来做:

ECL:

(defun return-a-number () 5.2)
Run Code Online (Sandbox Code Playgroud)

用C++读取和打印:

auto x = ecl_to_float(lisp("(return-a-number)"));
std::cout << "The number is " << x << std::endl;
Run Code Online (Sandbox Code Playgroud)

一切都设置好并且工作正常,但我不知道用字符串而不是数字来做.这是我尝试过的:

ECL:

(defun return-a-string () "Hello")
Run Code Online (Sandbox Code Playgroud)

C++:

 cl_object y = lisp("(return-a-string)");
 std::cout << "A string: " << y << std::endl;
Run Code Online (Sandbox Code Playgroud)

打印字符串的结果是这样的:

一个字符串:0x3188b00

我猜是字符串的地址.

这是捕获调试器和y cl_object 的内容.y-> string.self类型是一个ecl_character.

调试

common-lisp ecl

4
推荐指数
1
解决办法
611
查看次数

标签 统计

common-lisp ×1

ecl ×1