如何在其它编程语言中调用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 osdef 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 导出的 apiinitCEFApplication = libenergy.initCEFApplicationcefFormShow = libenergy.cefFormShowcefFormFree = libenergy.cefFormFreeloadLibenergyBtn = 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.先加载dlldef 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