From 45a24933b0f26485608ca3055d20f81bc7b78bbe Mon Sep 17 00:00:00 2001 From: Forest <3159424635@qq.com> Date: Thu, 20 Feb 2025 22:13:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0main.go=E4=B8=AD=E8=B0=83?= =?UTF-8?q?=E7=94=A8dll=E9=83=A8=E5=88=86=EF=BC=8Cwind.AppInfo=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86String=E7=B1=BBWebUrl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 34 ++++++++++++++++++++++++ wba/wind.go | 1 + wind(dll源文件).go | 55 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 wind(dll源文件).go diff --git a/main.go b/main.go index 6ba8769..3ae472b 100644 --- a/main.go +++ b/main.go @@ -2,13 +2,47 @@ package main import ( "ProjectWIND/core" + "ProjectWIND/wba" "fmt" + "log" "os" + "syscall" + "unsafe" ) var CoreOs = core.GetOS() func main() { + // 加载 DLL 文件 + dll, err := syscall.LoadDLL("wind.dll") + if err != nil { + log.Fatalf("加载dll文件失败: %v", err) + } + + // 绑定到 AppInit 函数 + appInitProc, err := dll.FindProc("AppInit") + if err != nil { + log.Fatalf("查找AppInit函数失败: %v", err) + } + + // 调用 AppInit 函数 + ret, _, err := appInitProc.Call() + if err != nil { + log.Fatalf("调用AppInit函数失败: %v", err) + } + + // 处理 AppInfo + appInfo := (*wba.AppInfo)(unsafe.Pointer(ret)) // 使用导入的 AppInfo + + // 打印 AppInfo 数据 + fmt.Printf("App Name: %s\n", appInfo.Name) + fmt.Printf("Author: %s\n", appInfo.Author) + fmt.Printf("Version: %s\n", appInfo.Version) + fmt.Printf("Description: %s\n", appInfo.Description) + fmt.Printf("Namespace: %s\n", appInfo.Namespace) + fmt.Printf("Web URL: %s\n", appInfo.WebUrl) + fmt.Printf("License: %s\n", appInfo.License) + //如果没有参数,则启动WebUI if len(os.Args) <= 1 { initCore() diff --git a/wba/wind.go b/wba/wind.go index 14fd035..afc0769 100644 --- a/wba/wind.go +++ b/wba/wind.go @@ -60,6 +60,7 @@ type AppInfo struct { License string AppType string Rule string + WebUrl string CmdMap map[string]Cmd MessageEventHandler func(msg MessageEventInfo) NoticeEventHandler func(msg NoticeEventInfo) diff --git a/wind(dll源文件).go b/wind(dll源文件).go new file mode 100644 index 0000000..7574425 --- /dev/null +++ b/wind(dll源文件).go @@ -0,0 +1,55 @@ +package main + +import "C" +import ( + "ProjectWIND/wba" + "log" +) + +//export AppInit +func AppInit() wba.AppInfo { + // 写入应用信息 + app := wba.NewApp( + wba.WithName("app_demo"), // 应用名称 + wba.WithAuthor("WIND"), // 作者 + wba.WithVersion("1.0.0"), // 版本 + wba.WithDescription("This is a demo application"), // 应用描述 + wba.WithNamespace("app_demo"), // 命名空间, 私有数据库请使用应用的名称, 公共数据库请使用"PUBLIC" + wba.WithWebUrl("https://github.com/wind/app_demo"), // 应用主页 + wba.WithLicense("MIT"), // 应用许可证 + ) + + // 定义命令 + cmdTest := wba.NewCmd( + //命令名称 + "app", + //命令介绍 + "插件测试", + func(args []string, msg wba.MessageEventInfo) { + val := args[0] + log.Println("app_demo cmdTest", val) + switch val { + case "help": + { + wba.Wind.SendMsg(msg, "app_demo help", false) + } + default: + { + wba.Wind.SendMsg(msg, "Hello, wind app!", false) + return + } + } + }, + ) + + // 将命令添加到应用命令列表中 + app.AddCmd("app", cmdTest) + + return app +} + +// Application 向核心暴露的应用接口,标识符为Application, 不可修改 +var Application = AppInit() + +func main() { +}