python + Go回撥函式
阿新 • • 發佈:2022-05-10
1、Go程式碼:
package main /* #include <stdio.h> typedef void (*callback)(int); static void funcs(callback c1,callback c2,int p1,int p2) { c1(p1); c2(p2); } */ import "C" import ( "fmt" "unsafe" ) //export call func call(c1,c2 unsafe.Pointer,p1 ,p2 C.int) { c11 := C.callback(c1) c22 := C.callback(c2) C.funcs(c11,c22,p1,p2) } //export run func run(n int) int{ /* 必須要export 函式名 //是註釋的意思,相當於Python中的 # 我也是第一次見註釋還有作用,黑人三問好??? 固定寫法 */ sum := 0 for i := 0; i < n; i++ { sum += i } fmt.Println("我是Go程式碼,我跑完了,我的結果是:",sum) return sum } func main() { //main函式中什麼都不要寫,和包名main要對應 }
2、python 程式碼
from ctypes import * test = cdll.LoadLibrary("./libtarget.so") def test_callback1(val): print("I'm callback1") print(val) def test_callback2(val): print("I'm callback1") print( val) CMPFUNC = CFUNCTYPE(None, c_int) cbk1 = CMPFUNC(test_callback1) cbk2 = CMPFUNC(test_callback2) test.call(cbk1,cbk2,1,2)
CFUNCTYPE
:設定函式的返回值,引數CMPFUNC
:註冊回撥函式