//DLL交互
import golang;
var go = golang();//创建Go编译器

/*
需要先下载安装 MinGW-W64: https://sourceforge.net/projects/mingw-w64 仅支持64位系统。
或者安装TDM-GCC: http://tdm-gcc.tdragon.net/download 提供32位、64位安装包。
Go语言快速入门 https://quickref.me/golang

go 官方提供的编译器可能会被杀毒软件误报病毒阻止运行或自动删除，
如果 go编译器无法正常运行，请尝试删除~\lib\golang\.res 下的文件，
然后重新安装 go 编译器试试，golang 扩展库支持系统已安装的 go 编译器。
*/

//Go源码与字符串都是UTF-8编码，跟aardio一样很方便
string.save("/hello.go",`
package main

import "C"
import "fmt"

//export SayHello
func SayHello(name *string,p *C.char) {
    fmt.Printf("Go says: %s!\n", *name)
    *name = "Go语言修改了字符串：" +  C.GoString((*C.char)(p))
}

func main() {
   //DLL入口函数,没有也要写个空的
} `)

//编译Go源码生成DLL文件
go.buildShared("/hello.go","/hello.dll");

//加载Go编译的DLL，注意要指定cdecl调用约定
var dll = raw.loadDll("/hello.dll",,"cdecl");


//直接就可以调用DLL里的函数，不用声明
console.open();

var goString = golang.string( "必须在Go函数名前面加上 export 函数名的注释才能导出函数");

/*
相关文档：《 aardio 用户手册 / 函数库 / 核心库 / raw 库 / 不声明调用API 》
相关范例：「 aardio 范例 / 调用其他语言 / C语言 」
*/
dll.SayHello( goString ,"这是普通字符串");

//console.log( tostring(goString) )
console.log(goString)

console.pause();
   