当前第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》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 详解Golang编译成DLL文件