三方语言中调用, Go Energy GUI编译的dll动态链接库CEF

如何在其它编程语言中调用energy编译的dll动态链接库,以使用CEF 或 LCL库

Energy是Go语言基于LCL + CEF开发的跨平台GUI框架, 具有很容易使用CEF 和 LCL控件库 interface 便利

示例链接

正文

为方便起见使用 python 调用 go energy 编译的dll

准备

系统:Windows 10 intel x64
环境

  • python 3.10.10
  • golang 1.19
  • cgo mingw64 12.2.0
  • energy 开发环境

运行

  • 直接使用 示例链接 提供的代码
    以下仅提供部分关键 api 定义。 因CEF具有复杂性, 该示例仅演示可行性

  • export_cef.go
    在dll中初始化CEF环境 initCEFApplication

//export initCEFApplication
func initCEFApplication() {
....
}

在dll中显示创建的CEF浏览器窗口 cefFormShow

//export cefFormShow
func cefFormShow() {
....
}

在dll中关闭并释放掉CEF浏览器窗口 cefFormFree

//export cefFormFree
func cefFormFree() {
....
}
  • 编译提供的示例 > libenergy.dll
    以示例为准,在 cmd 进入目录, 得到 libenergy.dll
    运行Go编译命令 go build -i -ldflags="-s -w" -buildmode=c-shared -o libenergy.dll

  • pyLoadLibenergy.py
    在python环境中导入libenergy.dll库
    python代码比较少,全贴进来了。

import tkinter as tk
from ctypes import cdll, wintypes
import os

def main():
    root = tk.Tk()
    root.title("python-load-dll")
    root.geometry("400x300")

    current_directory = os.getcwd()
    libenergyPath = current_directory + "\libenergy.dll"
    print('libenergyPath: ', libenergyPath)
  
    # 加载dll句柄
    libenergy = cdll.LoadLibrary(libenergyPath)

	# 获取energy 导出的 api
    initCEFApplication = libenergy.initCEFApplication
    cefFormShow = libenergy.cefFormShow
    cefFormFree = libenergy.cefFormFree

    loadLibenergyBtn = tk.Button(root, text="加载libenergy.dll", command=lambda: load_dll_function())
    loadLibenergyBtn.pack()

    showWindowBtn = tk.Button(root, text="显示libenergy创建的窗口", command=lambda: show_window_function())
    showWindowBtn.pack()
	
	# 1.先加载dll
    def load_dll_function():
        print('call_dll_function')
        initCEFApplication()
        
	# 2. 显示窗口
    def show_window_function():
        print('show_window_function')
        cefFormShow()

    def on_closing():
        print('on_closing')
        cefFormFree()
        root.destroy()
    root.protocol("WM_DELETE_WINDOW", on_closing)

    # 进入主事件循环
    root.mainloop()

if __name__ == "__main__":
    main()

  • 在当前目录中执行命令 python pyLoadLibenergy.py

运行效果图

python加载go energy编译的动态链接库dll 使用cef效果图

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanghye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值