Pass a string from ECL to C++

Viewed 937

I'm trying to get into the fascinating world of Common Lisp embedded in C++. My problem is that I can't manage to read and print from c++ a string returned by a lisp function defined in ECL.

In C++ I have this function to run arbitrary Lisp expressions:

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

I can do it with a number in this way:

ECL:

(defun return-a-number () 5.2)

read and print in C++:

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

Everything is set and works fine, but I don't know to do it with a string instead of a number. This is what I have tried:

ECL:

(defun return-a-string () "Hello")

C++:

 cl_object y = lisp("(return-a-string)");
 std::cout << "A string: " << y << std::endl;

And the result of printing the string is this:

A string: 0x3188b00

that I guess is the address of the string.

Here it is a capture of the debugger and the contents of the y cl_object. y->string.self type is an ecl_character.

Debug

4 Answers
Related