~/error$ cat comp.scm<br>(c-declare #<<end<br>typedef struct foo<br>{<br> int x, y;<br>} foo;<br><br>foo global_foo;<br><br>//foo* get_foo(const char* s)<br>foo* get_foo(int)<br>{<br> return &global_foo;<br>}                             <br>
<br>foo* get_str_foo(const char* s)<br>{<br> return &global_foo;<br>}                             <br><br>int add(int x)<br>{<br> return x + 2;<br>}        <br><br>end<br>)<br><br><br>(c-define-type foo "foo")<br>
(c-define-type void* (pointer void))<br>(c-define-type foo* (pointer foo))<br>(define add (c-lambda (int) int "add"))<br>(define get-foo (c-lambda (int) foo* "get_foo"));<br>(define get-foo2 (c-lambda (int) void* "get_foo"));<br>
(define get-str-foo2 (c-lambda (char-string) void* "get_str_foo"));<br>(define get-str-foo (c-lambda (char-string) foo* "get_str_foo"));<br><br><br>~/error$ cat make.scm<br>#!/usr/local/Gambit-C/bin/gsc -i<br>
<br>(compile-file-to-c "comp")<br>(link-flat '("comp") output: "comp.o1.c")<br>(shell-command "g++ -shared -D___DYNAMIC -fPIC comp.c comp.o1.c -o comp.o1")<br><br><br>~/error$ cat int.scm<br>
(load "comp")<br>(pp (add 2))<br>(pp (get-foo2 2))<br>(pp (get-foo 2))<br>(pp (get-str-foo2 "hello"))<br>(pp (get-str-foo "world"))<br><br><br><br>Question: what's the difference between get-str-foo2 and get-foo2 that causes one to work and one throw an error?<br>
<br><br>