From 26b771f9f903db24581eb7798f5bddf8db0558f8 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sat, 22 Jun 2024 02:39:29 +0800 Subject: [PATCH] cppintf: with param --- _demo/cppintf/cppintf.go | 16 ++++++++-------- _demo/cppintf/foo/bar/bar.cpp | 6 +++--- _demo/cppintf/foo/foo.go | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/_demo/cppintf/cppintf.go b/_demo/cppintf/cppintf.go index 91ab6f7c..9d2475c8 100644 --- a/_demo/cppintf/cppintf.go +++ b/_demo/cppintf/cppintf.go @@ -3,23 +3,23 @@ package main import ( "github.com/goplus/llgo/_demo/cppintf/foo" "github.com/goplus/llgo/c" + "github.com/goplus/llgo/c/math" ) type Bar struct { foo.Callback a int - b float64 } -func NewBar(a int, b float64) *Bar { +func NewBar(a int) *Bar { return &Bar{ Callback: foo.Callback{ Vptr: &foo.CallbackVtbl{ - ValA: c.Func((*Bar).getA), - ValB: c.Func((*Bar).getB), + Val: c.Func((*Bar).getA), + Calc: c.Func((*Bar).sqrt), }, }, - a: a, b: b, + a: a, } } @@ -27,11 +27,11 @@ func (p *Bar) getA() int { return p.a } -func (p *Bar) getB() float64 { - return p.b +func (p *Bar) sqrt(v float64) float64 { + return math.Sqrt(v) } func main() { - bar := NewBar(1, 2.0) + bar := NewBar(1) foo.F(&bar.Callback) } diff --git a/_demo/cppintf/foo/bar/bar.cpp b/_demo/cppintf/foo/bar/bar.cpp index d78c0b84..f6a8fa5f 100644 --- a/_demo/cppintf/foo/bar/bar.cpp +++ b/_demo/cppintf/foo/bar/bar.cpp @@ -2,10 +2,10 @@ #define interface struct interface ICallback { - virtual int valA() = 0; - virtual double valB() = 0; + virtual int val() = 0; + virtual double calc(double v) = 0; }; extern "C" void f(ICallback* cb) { - printf("Hello %d, %lf!\n", cb->valA(), cb->valB()); + printf("val: %d\ncalc(2): %lf\n", cb->val(), cb->calc(2)); } diff --git a/_demo/cppintf/foo/foo.go b/_demo/cppintf/foo/foo.go index 8393f78e..eeeb2349 100644 --- a/_demo/cppintf/foo/foo.go +++ b/_demo/cppintf/foo/foo.go @@ -14,8 +14,8 @@ type Callback struct { } type CallbackVtbl struct { - ValA unsafe.Pointer - ValB unsafe.Pointer + Val unsafe.Pointer + Calc unsafe.Pointer } //go:linkname F C.f