当前位置: 首页 > 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效果图

相关文章:

  • 启动u盘恢复成普通u盘
  • 关于 c++ cout << endl; 的源码解释
  • 了解VS安全编译选项GS
  • 【一百】【算法分析与设计】N皇后问题常规解法+位运算解法
  • C语言(内存函数)
  • 挂上了代理加速器梯子之后,Git clone指令下载仍旧很慢的问题
  • OpenCV学习 基础图像操作(十七):泛洪与分水岭算法
  • 9 html综合案例-注册界面
  • LIO-EKF: 运行数据UrbanNav与mid360设备详细教程
  • 黑马一站制造数仓实战2
  • C#使用GDI对一个矩形进行任意角度旋转
  • exe语言编程:深入探索与挑战未知
  • 香橙派OrangePI AiPro测评 【运行qt,编解码,xfreeRDP】
  • 49、Floyd求最短路
  • 4K高刷显示器 - 蚂蚁电竞ANT27VU
  • [NodeJS] 关于Buffer
  • [译]前端离线指南(上)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【comparator, comparable】小总结
  • 78. Subsets
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android优雅地处理按钮重复点击
  • C++类中的特殊成员函数
  • conda常用的命令
  • Docker入门(二) - Dockerfile
  • JAVA 学习IO流
  • overflow: hidden IE7无效
  • Redis学习笔记 - pipline(流水线、管道)
  • SwizzleMethod 黑魔法
  • Terraform入门 - 3. 变更基础设施
  • Tornado学习笔记(1)
  • 爬虫模拟登陆 SegmentFault
  • 七牛云假注销小指南
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 新版博客前端前瞻
  • 学习笔记:对象,原型和继承(1)
  • 怎么把视频里的音乐提取出来
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 湖北分布式智能数据采集方法有哪些?
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ######## golang各章节终篇索引 ########
  • (2)(2.10) LTM telemetry
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (计算机网络)物理层
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)可以带来幸福的一本书
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 分布式技术比较
  • .Net多线程总结
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @EnableWebSecurity 注解的用途及适用场景
  • @JsonFormat 和 @DateTimeFormat 的区别
  • @NoArgsConstructor和@AllArgsConstructor,@Builder