• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go与C/C++互相调用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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() )
}

未完待续...


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap