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))