日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Go与C/C++ 互相调用

發布時間:2025/6/17 c/c++ 37 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Go与C/C++ 互相调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A. Go調用C

1、Go調用C:在go文件里調C(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)

/*
* go 和 C 互調用程序
*/ 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可以直接調

2、Go調用C:通過.h頭文件調(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)

/*
* go 和 C 互調用程序
*/ package main /*
#include "MyHeadFile.h"
*/
import "C"
import (
"fmt"
) func main() {
fmt.Println(C.MyFunc("Hello"))
}

上面代碼以注釋的方式導入MyHeadFile.h頭文件,然后可以直接使用其中的函數

3、Go生成動態庫dll(以下代碼中除了開頭的注釋之外,其他注釋不可刪除)

/*
* Go生成動態庫的命令(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調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調用C++

未完待續...

總結

以上是生活随笔為你收集整理的Go与C/C++ 互相调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。