aardio 文档
aardio 范例:生成 DLL
//生成 DLL
import console.int;
import golang;
//参数 @1 指定工作目录,默认为 "/"
var go = golang("/go")
go.setGoProxy("https://mirrors.aliyun.com/goproxy/,direct");
//初始化项目
go.mod("init golang/dispDemo")
//下载第三方模块
go.get("github.com/go-ole/go-ole")
go.main = /**********
package main
import (
"C"
"unsafe"
"github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
"fmt"
)
//export TestDispatch
func TestDispatch(dispatchIn uintptr) uintptr {
//这里不需要初始化 OLE,aardio 自动支持这些
// 获取传入的 IDispatch 指针
dispatch := (*ole.IDispatch)(unsafe.Pointer(dispatchIn))
// 调用 dispatch 对象的方法
result := oleutil.MustCallMethod(dispatch, "Add", 1, 2)
defer result.Clear()
// 假设 Add 方法返回一个数值,可以这样获取返回值
// value := result.Value() // 返回 interface{}
// valueInt := result.ToInt() // 返回 int
// valueFloat := result.ToFloat() // 返回 float64
// valueString := result.ToString() // 返回 string
// 打印结果(假设返回一个数值)
fmt.Println("Result:", result.Value())
// 创建新的 IDispatch 对象
clsid, err := ole.CLSIDFromProgID("Scripting.Dictionary")
if err != nil {
panic(err)
}
unknown, err := ole.CreateInstance(clsid, nil)
if err != nil {
panic(err)
}
defer unknown.Release()
//这里增加引用计数
newDispatch, err := unknown.QueryInterface(ole.IID_IDispatch)
if err != nil {
panic(err)
}
// 返回新的 IDispatch 对象的指针(不必释放引用计数,由 aardio 接收时释放)
return uintptr(unsafe.Pointer(newDispatch))
}
func main() {
// 需要有一个空的 main 函数以满足 go build
}
**********/
go.buildShared("/dispDemo.go");
Markdown 格式