<div dir="ltr"><div><div><div><div>Greetings to everybody!<br><br></div>I have recently tried to use Gambit-C for interfacing OpenCascade (OCE) library which is written in C++.<br></div>So, I am using Gambit-C based on g++ compiler.<br>
</div>I have started with simple vector class i.e. gp_XY which has 2 members, x and y coordinate.<br></div><div>From OCE source:<br><br>inline void gp_XY::Add (const gp_XY& Other) {<br>  x += Other.x;<br>  y += Other.y;<br>
}<br><br></div>This is from my gpXY.scm :<br><br><div>(##namespace ("oce-gp-xy#"))<br><br>(##include "~~/lib/gambit#.scm")<br><br>(declare (standard-bindings)<br>         (block))<br><br>(c-declare #<<c-declare-end<br>
  #include <gp_XY.hxx><br>  extern "C" {<br>  typedef struct h_gp_XY h_gp_XY;<br>  typedef struct h_gp_Mat2d h_gp_Mat2d;<br>  h_gp_XY* gp_XY_create() {<br>    return reinterpret_cast<h_gp_XY*>(new gp_XY());<br>
  }<br>  h_gp_XY* gp_XY_create_ff(const Standard_Real x,const Standard_Real y) {<br>    return reinterpret_cast<h_gp_XY*>(new gp_XY(x,y));<br>  }<br>  void gp_XY_destroy(h_gp_XY* h) {<br>    delete reinterpret_cast<gp_XY*>(h);<br>
  }<br>  void my_add(gp_XY& Me, const gp_XY& Other) {<br>     Me.SetX(Me.X() + Other.X());<br>     Me.SetY(Me.Y() + Other.Y());<br>  }<br>}<br>c-declare-end<br>)<br><br>(c-define-type XY "h_gp_XY")<br>(c-define-type XY* (pointer XY))<br>
(c-define-type Mat2d "h_gp_Mat2d")<br>(c-define-type Mat2d* (pointer Mat2d))<br>...<br></div><div>; problem with add<br></div><div>(define add<br>  (c-lambda (XY* XY*) void <br>#<<c-lambda-end<br>      const gp_XY& other = *(reinterpret_cast<gp_XY*>(___arg2));<br>
      gp_XY* th = reinterpret_cast<gp_XY*>(___arg1);<br>      th->Add(other);<br>;      reinterpret_cast<gp_XY*>(___arg1)->Add(other);<br>c-lambda-end<br>))<br><br></div><div>That file is compiled and linked with OCE libraries.<br>
</div><div>And in gsi interpreter:<br>> (load "gpXY")                   <br>"/home/emil/projects/scheme/gambit/oce/c++/src/gpXY.o1"<br>> (##include "gpXY#.scm")         <br>> (define p1 (create-ff 1.0 2.0)) <br>
> (define p2 (create-ff 10.0 5.0))<br>> (add p1 p2)                     <br>> (x p1)     <br>21.<br>> (y p1)     <br>12.<br><br></div><div>Obviously there is bug somewhere, because results should be 11 and 7.<br>
</div><div>So I wrote my_add function and it calculated add vector correctly.<br></div><div>Is it something wrong in my code?<br></div><div>I do not have experience in Gambit-C.<br></div><div>Any help or hint will be appreciated.</div>
<div><br></div><div>Regards,<br></div><div>Emil<br></div><div><br></div><div><div><br></div></div></div>