diff --git a/lcl/api/dllimports/importfuncs.go b/lcl/api/dllimports/importfuncs.go index f22dba7..d3d5acb 100644 --- a/lcl/api/dllimports/importfuncs.go +++ b/lcl/api/dllimports/importfuncs.go @@ -25,7 +25,7 @@ func internalGetImportFunc(uiLib DLL, table []*ImportTable, index int) ProcAddr var err error item.addr, err = uiLib.GetProcAddr(item.name) if err != nil { - fmt.Println(err) + fmt.Println(err, item.name) return 0 } atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&table[index].addr)), unsafe.Pointer(item.addr)) diff --git a/lcl/api/energy_api.go b/lcl/api/energy_api.go index deed4ae..aa499c9 100644 --- a/lcl/api/energy_api.go +++ b/lcl/api/energy_api.go @@ -14,6 +14,8 @@ package api import "github.com/energye/golcl/lcl/api/dllimports" +var releaseCallback func() + func APIInit() { uiLib = loadUILib() } @@ -25,6 +27,16 @@ func ImportDefFunc(importTable []*dllimports.ImportTable, index int) dllimports. // EnergyLibRelease 在energy中释放 func EnergyLibRelease() { + if releaseCallback != nil { + releaseCallback() + } callGC() closeLib() } + +// SetReleaseCallback 应用运行结束后释放资源之前执行 +func SetReleaseCallback(fn func()) { + if releaseCallback == nil { + releaseCallback = fn + } +} diff --git a/lcl/api/importdef.go b/lcl/api/importdef.go index 52ad9e2..1936d92 100644 --- a/lcl/api/importdef.go +++ b/lcl/api/importdef.go @@ -27,6 +27,9 @@ func Application_CreateForm(app uintptr) uintptr { func Application_Run(app uintptr) { defer func() { + if releaseCallback != nil { + releaseCallback() + } // 开启了finalizerOn选项后,以防止关闭库后GC还没开始调用。 callGC() // 运行结束后就结束close掉lib,不然他不会关掉的