Go与C/C++ 互相调用
生活随笔
收集整理的這篇文章主要介紹了
Go与C/C++ 互相调用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
A. Go調(diào)用C
1、Go調(diào)用C:在go文件里調(diào)C(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)
/*
* go 和 C 互調(diào)用程序
*/
package main
/*
int Add( int a, int b ) {
return a + b;
}
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println(C.Add(1, 2))
}
上面的C代碼雖然被“注釋”了,但是Go可以直接調(diào)
2、Go調(diào)用C:通過.h頭文件調(diào)(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)
/*
* go 和 C 互調(diào)用程序
*/
package main
/*
#include "MyHeadFile.h"
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println(C.MyFunc("Hello"))
}
上面代碼以注釋的方式導(dǎo)入MyHeadFile.h頭文件,然后可以直接使用其中的函數(shù)
3、Go生成動態(tài)庫dll(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)
/*
* Go生成動態(tài)庫的命令(Windows平臺需安裝mingw-w64):
* go build -o hello.dll -buildmode=c-shared hello.go
* go build -o hello.so -buildmode=c-shared hello.go
*/
package main
import "C"
import (
"fmt"
)
//export HelloGolang
func HelloGolang() {
fmt.Println("HelloGolang")
}
func main() {
fmt.Println("main")
}
4、示例:Go調(diào)C并返回
package main
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 1024
char* Foo( char *input ) {
char* res = malloc( LEN * sizeof( char ) );
sprintf( res, "%s %s", input, "World!" );
return res;
}*/
import "C"
import (
"fmt"
"unsafe"
)
func getID() string {
cs := C.CString( "Hello" )
res := C.Foo( cs )
str := C.GoString( res )
C.free( unsafe.Pointer( cs ) )
C.free( unsafe.Pointer( res) )
return str
}
func main() {
fmt.Println( getID() )
}
B. Go調(diào)用C++
未完待續(xù)...
總結(jié)
以上是生活随笔為你收集整理的Go与C/C++ 互相调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「Log」2023.8.11 小记
- 下一篇: 提前还贷划算吗 利息支出会减少