Golang1.7使用CGO在Go代码中定义C函数

前端之家收集整理的这篇文章主要介绍了Golang1.7使用CGO在Go代码中定义C函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
test.h文件内容:
int test(void* fn);
void println(char* str);
void callback(void* fn);
test.c文件内容:
#include <test.h>
int test(void* fn) { callback(fn); println("Hello,This from Clang");
    return 0;
}
main.go文件代码:
package main

import (
    "fmt"
    "unsafe"
)

/* #cgo CFLAGS: -I./ #include <test.h> */
import "C"

/* CFLAGS 上边指示了头文件地址 LDFLAGS 下边的表明了库文件地址 都是当前文件的相对位置 -I (大写)指示了头文件目录 -L 指示了库文件目录 -l(L小写)指示所用的具体的某个库文件 */

//export println
func println(str *C.char) {
    fmt.Println(C.GoString(str))
}

//export callback
func callback(ptr unsafe.Pointer) {
    f := *(*func(str *C.char))(ptr)
    f(C.CString("Hello,This from Golang"))
}

func main() {
    var fn = println
    C.test(unsafe.Pointer(&fn))
}
原文链接:https://www.f2er.com/go/189340.html

猜你在找的Go相关文章