On 2010-11-24, at 2:05 PM, David Dreisigmeyer wrote:
Does anyone have a simple example of calling a C++ function from Gambit? Thanks, -Dave
Calling C++ functions is just like calling C functions (see the Gambit manual for examples). If you want to call C++ methods, below you'll find an example of calling some C++ fstream methods. I even threw in the automatic reclaiming of the C++ allocated ofstream object. Marc (c-declare #<<c-declare-end #include <fstream> ___SCMOBJ delete_ofstream(void *ptr) { delete (std::ofstream*)ptr; return ___NO_ERR; } c-declare-end ) (c-define-type std::ofstream "std::ofstream") (c-define-type std::ofstream* (pointer std::ofstream (std::ofstream*))) (c-define-type std::ofstream*/GC (pointer std::ofstream (std::ofstream*) "delete_ofstream")) (define new-ofstream (c-lambda (nonnull-char-string) std::ofstream*/GC "___result_voidstar = new std::ofstream(___arg1);")) (define ofstream-write-string (c-lambda (std::ofstream* nonnull-char-string) void "*___arg1 << ___arg2;")) (define ofstream-close (c-lambda (std::ofstream*) void "___arg1->close();")) ;; test: (let ((s (new-ofstream "bar"))) (pretty-print s) (ofstream-write-string s "hello!\n") (ofstream-close s))