本文作者:icy

Golang 编译成 dll/so 动态库 给其他语言调用[实列为 delphi调用]

icy 2021-09-26 3504 1条评论
Golang 编译成 dll/so 动态库 给其他语言调用[实列为 delphi调用]摘要: 最近在做一个桌面应用的东西 ,涉及到一个功能,(因为是桌面的有界面的程序我一般都会考虑用delphi)但是其中涉及到一个功能 ,delphi没有现成的实现单元或者组件实现 ,也不是...

最近在做一个桌面应用的东西 ,涉及到一个功能,(因为是桌面的有界面的程序我一般都会考虑用delphi)

但是其中涉及到一个功能 ,delphi没有现成的实现单元或者组件实现 ,

也不是一个简单的方法所以直接翻译过来这个选项放弃之。。

本来第一想到的是用惯了的c/c++ 但是顺带看了下go的实现包,哇简单哦。

以前一直知道,可以cgo成动态和静态调用的库。。。这次自己也小试一下吧。


首先在一定要import 一个c  如下代码

/*
#include 
#include 
#include 
*/
import "C"

然后是函数编写和导出 如下

//export BuildResult
func BuildResult(key *C.char , input *C.char,output *C.char, outputsize C.size_t)

这里要注意的是 //export 这给时候的这个所谓的注释 就是意指 导出函数 后面更一个函数名称即可

入参转换到 go 的对应数据即可

比如 C.GoString(input) // 返回go的字符串

详细请仔细查阅 对照表


下完导出以后  就编译吧 使用下面命令生成 动态库

go build -ldflags "-s -w" -buildmode=c-shared -o libmdsu.dll main.go


最后就是调用端的部分了 下面是Delphi的

procedure BuildResult(const key,input: PAnsiChar;  Output:  PAnsiChar; outputsize: Cardinal);  cdecl;
implementation
{$IFDEF CPUX64}
const CLIb = 'libmdsu_x64.dll';
{$ELSE}
const CLIb = 'libmdsu_x86.dll';
{$ENDIF}

procedure BuildResult;external CLib;
end.


觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

分享

发表评论

快捷回复:

评论列表 (有 1 条评论,3504人围观)参与讨论
网友昵称:访客
访客 游客 沙发
2021-11-04 回复
太赞了,解决了我的问题