如何在其它编程语言中调用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