windows下go调自己写的c动态库(dll)
windows下go调自己写的c动态库(dll)
徐学良 发表于2年前
windows下go调自己写的c动态库(dll)
  • 发表于 2年前
  • 阅读 853
  • 收藏 5
  • 点赞 0
  • 评论 1

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: linux下开发感觉没有windows下开发直观,go既然是跨平台的而且go在linux下可以调用c库,那么个人感觉在windows下肯定也可以调用,但是上网搜了很多资料整理终于调用成功,在这分享给大家

首先编写c文件testdll.c

#include <stdio.h>
int myadd(int a, int b)
{
    return a + b;
}

编译成动态库

gcc -shared testdll.c -o add.dll  得到 add.dll文件

下面就是引用:

package main

import (

    "fmt"

    "syscall"

)

func main() {

    addfile, err := syscall.LoadLibrary("../add.dll") //动态库的路径

    if err != nil {

        fmt.Printf("cgo:err :%v\n", err)

    }

    myaddcall, _ := syscall.GetProcAddress(addfile, "myadd")

    var nargs uintptr = 3

    ret, _, callErr := syscall.Syscall(uintptr(myaddcall), nargs, 5, 3, 0)

    if callErr != 0 {

        fmt.Printf("Call myaddcall: %v\n", callErr)

    }

    fmt.Printf("myadd:%v\n", ret)

}

然后直接go run运行即可


非常感谢知乎和周贤,是他们帮我解决的这个问题,下面是问题链接,有兴趣的可以看下

https://www.zhihu.com/question/39015381

共有 人打赏支持
粉丝 21
博文 180
码字总数 13338
评论 (1)
×
徐学良
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: