当前位置: 首页 > news >正文

三方语言中调用, 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 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

运行效果图

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

http://www.lryc.cn/news/357098.html

相关文章:

  • Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)
  • Java+Swing+Mysql实现飞机订票系统
  • 2024 rk
  • Java实现多张图片合并保存到pdf中
  • 揭秘智慧校园:可视化技术引领教育新篇章
  • 基础9 探索图形化编程的奥秘:从物联网到工业自动化
  • RPC-----RCF
  • StarRocks中,这些配置项是表属性的一部分
  • Activity->Activity生命周期
  • 乐鑫ESP串口驱动安装,安装cp210x驱动
  • Django缓存
  • Python 元组
  • JAVA面试题大全(十八)
  • 如何利用Firebase Hosting来托管网站
  • 揭秘“循环消费”模式:消费即收益,购物新体验
  • 图片怎样在线改像素大小?电脑快速修改图片大小的方法
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 【C++】list的使用方法和模拟实现
  • 【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp
  • Pyhton 二叉树层级遍历
  • Flutter 中的 FadeTransition 小部件:全面指南
  • 缓存存储器:性能提升的关键
  • 『大模型笔记』工程师的LLMs简介!
  • Vue中的常用指令
  • 百度页面奔跑的白熊html、css
  • Day-02面向对象
  • Sentinel-2 哨兵二号数据介绍及下载
  • 阿里智能信息数据挖掘复盘
  • Flutter中图片是怎么在flutter上呈现出来的?
  • 使用 CNN 训练自己的数据集