diff --git a/wcferry/client.go b/wcferry/client.go index 579c66e..fba2dea 100644 --- a/wcferry/client.go +++ b/wcferry/client.go @@ -2,12 +2,8 @@ package wcferry import ( "errors" - "runtime" - "syscall" "time" - "github.com/opentdp/go-helper/filer" - "github.com/opentdp/go-helper/logman" "github.com/opentdp/go-helper/onquit" ) @@ -92,40 +88,3 @@ func (c *Client) wxInitSDK() error { func (c *Client) wxDestroySDK() error { return c.sdkCall("WxDestroySDK") } - -// 调用 sdk.dll 中的函数 -// return error 错误信息 -func (c *Client) sdkCall(fn string, a ...uintptr) error { - dll := c.SdkLibrary - if dll == "" || runtime.GOOS != "windows" { - logman.Warn("skip to load sdk.dll") - return nil - } - // 查找 sdk.dll - if !filer.Exists(dll) { - dll = "wcferry/" + dll - if !filer.Exists(dll) { - return errors.New(dll + " not found") - } - } - // 加载 sdk.dll - sdk, err := syscall.LoadDLL(dll) - if err != nil { - logman.Warn("failed to load sdk.dll", "error", err) - return err - } - defer sdk.Release() - // 查找 fn 函数 - proc, err := sdk.FindProc(fn) - if err != nil { - logman.Warn("failed to call "+fn, "error", err) - return err - } - // 执行 fn(a...) - r1, r2, err := proc.Call(a...) - logman.Warn("call dll:"+fn, "r1", r1, "r2", r2, "error", err) - if err.Error() == "Attempt to access invalid address." { - err = nil // 忽略已知问题 - } - return err -} diff --git a/wcferry/client_linux.go b/wcferry/client_linux.go new file mode 100644 index 0000000..ea5cf80 --- /dev/null +++ b/wcferry/client_linux.go @@ -0,0 +1,14 @@ +//go:build !windows + +package wcferry + +import ( + "github.com/opentdp/go-helper/logman" +) + +// 调用 sdk.dll 中的函数 +// return error 错误信息 +func (c *Client) sdkCall(fn string, a ...uintptr) error { + logman.Warn("skip to load sdk.dll", "fn", fn, "a", a) + return nil +} diff --git a/wcferry/client_windows.go b/wcferry/client_windows.go new file mode 100644 index 0000000..b645181 --- /dev/null +++ b/wcferry/client_windows.go @@ -0,0 +1,48 @@ +//go:build windows + +package wcferry + +import ( + "errors" + "syscall" + + "github.com/opentdp/go-helper/filer" + "github.com/opentdp/go-helper/logman" +) + +// 调用 sdk.dll 中的函数 +// return error 错误信息 +func (c *Client) sdkCall(fn string, a ...uintptr) error { + if c.SdkLibrary == "" { + logman.Warn("skip to load sdk.dll") + return nil + } + // 查找 sdk.dll + dll := c.SdkLibrary + if !filer.Exists(dll) { + dll = "wcferry/" + dll + if !filer.Exists(dll) { + return errors.New(dll + " not found") + } + } + // 加载 sdk.dll + sdk, err := syscall.LoadDLL(dll) + if err != nil { + logman.Warn("failed to load sdk.dll", "error", err) + return err + } + defer sdk.Release() + // 查找 fn 函数 + proc, err := sdk.FindProc(fn) + if err != nil { + logman.Warn("failed to call "+fn, "error", err) + return err + } + // 执行 fn(a...) + r1, r2, err := proc.Call(a...) + logman.Warn("call dll:"+fn, "r1", r1, "r2", r2, "error", err) + if err.Error() == "Attempt to access invalid address." { + err = nil // 忽略已知问题 + } + return err +}