详解Golang编译成DLL文件


当前第2页 返回上一页

go build -ldflags "-s -w" -buildmode=c-shared -o func.dll func.go
还是有点大的,880KB,纯C 编译的只有48KB,应该是没有包含全部的依赖吧,go是全包进来了

Go 调用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package main

import (

    "fmt"

    "syscall"

)

 

func main() {

    dll := syscall.NewLazyDLL("func.dll")

    add := dll.NewProc("Add")

    prt := dll.NewProc("Print")

    r, err, msg := add.Call(32, 44)

    fmt.Println(r)

    fmt.Println(err)

    fmt.Println(msg)

     

    name := C.CString("Andy")

    prt.Call(uintptr(unsafe.Pointer(name)))

}

1

2

3

4

5

out:

76

0

The operation completed successfully.

Hello Andy

Python 调用

1

2

3

4

from ctypes import CDLL, c_char_p

dll = CDLL("func.dll")

dll.Add(32, 33)

dll.Print(c_char_p(bytes("Andy", "utf8")))

C++调用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include <iostream>

#include <windows.h>

 

using namespace std;

typedef int(*pAdd)(int a, int b);

typedef void(*pPrt)(char* s);

 

int main(int argc, char *argv[])

{

    HMODULE dll= LoadLibraryA("func.dll");

    pAdd add = (pAdd)GetProcAddress(dll, "Add");

    pPrt prt = (pPrt)GetProcAddress(dll, "Print");

    cout << add(321, 33) << endl;

    prt("Andy");

    FreeLibrary(dll);

    return 0;

}

更多相关技术文章,请访问go语言教程栏目!

以上就是详解Golang编译成DLL文件的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

golang zip中文乱码怎么解决

在 docker 下 golang 的 gomaxprocs 初始化混乱问题

【gocn酷go推荐】ip2location 解析 ip 地址库

测试平台(序)

06 golang分支和循环

gtpl go语言html渲染

golang怎么判断指针是否为空

洗牌算法的golang实现,随便学习几个知识点

记录golang recover的一个小坑

golang recover后怎么返回

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...