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