Initial commit
This commit is contained in:
commit
14e763c65a
|
@ -0,0 +1,2 @@
|
||||||
|
cgo-callback
|
||||||
|
mylib.o
|
|
@ -0,0 +1,13 @@
|
||||||
|
GO=go
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: cgo-callback
|
||||||
|
|
||||||
|
mylib.o: mylib.c
|
||||||
|
|
||||||
|
cgo-callback: mylib.o mylib.h
|
||||||
|
$(GO) build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -f mylib.o cgo-callback
|
|
@ -0,0 +1,13 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void callOnMeGo_cgo(int n)
|
||||||
|
{
|
||||||
|
printf("callOnMeGo_cgo called\n");
|
||||||
|
void callOnMeGo(int);
|
||||||
|
callOnMeGo(n);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
import "C"
|
|
@ -0,0 +1,45 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
#cgo CFLAGS: -I .
|
||||||
|
#cgo LDFLAGS: -L .
|
||||||
|
|
||||||
|
#include "mylib.h"
|
||||||
|
|
||||||
|
void callOnMeGo_cgo(int n);
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
//export callOnMeGo
|
||||||
|
func callOnMeGo(n int) {
|
||||||
|
printerCallback(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Printer func(int)
|
||||||
|
|
||||||
|
var printerCallback Printer
|
||||||
|
var printerCallbackLock sync.RWMutex
|
||||||
|
|
||||||
|
func usePrinter(p Printer) {
|
||||||
|
printerCallbackLock.Lock()
|
||||||
|
printerCallback = p
|
||||||
|
C.use_printer((C.printer_t)(unsafe.Pointer(C.callOnMeGo_cgo)))
|
||||||
|
printerCallback = nil
|
||||||
|
printerCallbackLock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
var myPrinter Printer = Printer(func(n int) {
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
fmt.Printf("%d\n", i)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
usePrinter(myPrinter)
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "mylib.h"
|
||||||
|
|
||||||
|
void use_printer(printer_t p)
|
||||||
|
{
|
||||||
|
p(14);
|
||||||
|
}
|
Loading…
Reference in New Issue