当前第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文件的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
go基础及语法(四)
golang实现二倍均值算法和抢红包的方法
聊聊dubbo-go-proxy的client
golang使用protobuf中的oneof
go module 引入本地包的问题
手撸golang 仿spring ioc/aop 之11 增强2
go-interface
golang可以写安卓吗
聊聊nacos-coredns-plugin的servermanager
关于处理电商系统订单状态的流转,分享下我的技术方案(附带源码)
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 详解Golang编译成DLL文件