最近在做一个桌面应用的东西 ,涉及到一个功能,(因为是桌面的有界面的程序我一般都会考虑用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.