最近在做一个桌面应用的东西 ,涉及到一个功能,(因为是桌面的有界面的程序我一般都会考虑用delphi)
但是其中涉及到一个功能 ,delphi没有现成的实现单元或者组件实现 ,
也不是一个简单的方法所以直接翻译过来这个选项放弃之。。
本来第一想到的是用惯了的c/c++ 但是顺带看了下go的实现包,哇简单哦。
以前一直知道,可以cgo成动态和静态调用的库。。。这次自己也小试一下吧。
首先在一定要import 一个c 如下代码
Go
/*
#include
#include
#include
*/
import "C"
然后是函数编写和导出 如下
Go
//export BuildResult
func BuildResult(key *C.char , input *C.char,output *C.char, outputsize C.size_t)
这里要注意的是 //export 这给时候的这个所谓的注释 就是意指 导出函数 后面更一个函数名称即可
入参转换到 go 的对应数据即可
比如 C.GoString(input) // 返回go的字符串
详细请仔细查阅 对照表
下完导出以后 就编译吧 使用下面命令生成 动态库
Bash
go build -ldflags "-s -w" -buildmode=c-shared -o libmdsu.dll main.go
最后就是调用端的部分了 下面是Delphi的
Pascal
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.
本文来自:Zelig[昏天暗地]原地址:https://zelig.cn/go-base/202109/37.html