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

news2025/1/11 13:01:08

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

过去的六年,教会了我很多事

目录 过去六年的风风雨雨android缘起爱情缘灭顿悟收拾心情,再次启航面试阿里大起大落 如今时光,刺激且美好未来展望 过去六年的风风雨雨 android缘起 2018年,我从北京联合大学毕业,跟随着学长一起创业,从此开始了我的…

基于异构图的大规模微服务系统性能问题诊断

简介:本文介绍由南开大学、清华大学、腾讯、国家超级计算天津中心共同合作的论文:基于异构图的大规模微服务系统性能问题诊断。该论文已被IEEE Transactions on Services Computing期刊录用 论文标题:Diagnosing Performance Issues for Lar…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

解密网络流量监控:优化IT运维的利器

引言: 在当今数字化时代,网络流量监控是维护网络稳定与业务连续性的关键。作为一名资深网络工程师,我将分享一些关于网络流量监控的重要知识,并探讨如何在IT运维中运用这一工具优化网络性能,确保业务的顺畅进行。 1. 网…

微前端(无界)入门

主应用通过props给子应用传值 父子应用通过eventBus通信 通过路由同步实现记录子应用的路由状态 主应用 main.ts: import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia import WujieVue from wujie-vue3import App from ./App.vue impo…

dust3r部署踩坑全记录

目前dust3r是三维重建最新最好的技术,运用了ViT编码器、Transformer、注意力机制、回归等技术,无需相机参数标定。 但是我部署过程中有很多坑,记录一下。 1.OSError: CUDA_HOME environment variable is not set. Please set it to your CU…

sprongboot+vue 游泳馆管理系统

游泳馆管理系统 spring bootvue 主要有游泳课程预约、网上购票、教练预约、游泳器材管理、会员管理等功能; 1、管理员 登录、修改密码 购票管理:查看订单、删除订单、修改订单 教练管理:教练信息查询、修改 课程信息:增删改查课程…

【class19】人工智能初步---语音识别(5)

【class19】 上节课,我们学习了:语音识别模型的结构和原理,同时调用创建好的AipSpeech客户端实现了语音转文字功能。 本节课,我们将初识字幕,学习这些知识点:1. srt字幕 2. 获取时间数据 …

认识NoSql

SQL是结构化的,NoSql是非结构化的 SQL是关联的: Nosql是无关联的: SQL采用的是SQL查询: 语法固定,好处是:只要是关系型数据库(Mysql,Oracle),都能够使用相同的语句进行查…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:Universal Language Model Fine-tuning for Text Classification 模型简称:ULMFiT 模型全名:Universal Language Model Fine-tuning ArXiv网址:https…

Three.js 入门介绍与环境搭建

Three.js 入门介绍与环境搭建 一、引言 Three.js 是一个强大的用于在网页上创建和展示 3D 图形的 JavaScript 库。艾斯视觉作为ui设计和前端开发服务商在这里很高兴能与你共同探讨学习:它使得开发者能够轻松地构建令人惊叹的 3D 场景和交互体验。在这篇文章中&…

Type ‘null‘ is not assignable to type ‘T‘. - ArkTSCheck

设置泛型将参数配置为 null 时抛出了如下异常: Type null is not assignable to type T. T could be instantiated with an arbitrary type which could be unrelated to null. <ArkTSCheck> 解决办法 在 null 后面添加 ! 即可,以表示该值不会为 null data: T null! 以…

python-web框架应用程序-Django环境搭建

python-web应用程序-Django环境搭建 一、Django入门 使用Django&#xff08;http://djangoproject.com/&#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知…

leetcode - 20.有效的括号(LinkedHashMap)

leetcode题目有效的括号&#xff0c;分类是easy&#xff0c;但是博主前前后后提交了几十次才通过&#xff0c;现在记录一下使用Java语言的写法。 题目链接: 20.有效的括号 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&…

SAP 生产订单报工函数BAPI_PRODORDCONF_CREATE_TT不返回报错信息

最近财务一直反馈MES报工的数据都没有成本,然后去查看原因发现是财务当月的KP26的价格没有进行维护,导致没有收集到工单的报工成本。 但是在前台操作CO11 报工的时候,系统会给出报错的信息 但是我们在调用函数BAPI_PRODORDCONF_CREATE_TT的时候,系统并没有返回报错的信息…

Windows电脑高颜值桌面便利贴,便签怎么设置

在这个看颜值的时代&#xff0c;我们不仅在衣着打扮上追求时尚与美观&#xff0c;就连电脑桌面也不愿放过。一张唯美的壁纸&#xff0c;几款别致的小工具&#xff0c;总能让我们的工作空间焕发出不一样的光彩。如果你也热衷于打造高颜值的电脑桌面&#xff0c;那么&#xff0c;…

下一代 CI/CD:利用 Tekton 和 ArgoCD 实现云原生自动化

一、回顾目标 背景&#xff1a; ​ 部门业务上云&#xff0c;之前服务采用传统的部署方式&#xff0c;这种方式简单&#xff0c;但是不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&#xff0c;而且程序之间容易产生影响。随着互联网时代的到来&#xff…

Leetcode - 131双周赛

一&#xff0c;3158. 求出出现两次数字的 XOR 值 本题是一道纯模拟题&#xff0c;直接暴力。 代码如下&#xff1a; class Solution {public int duplicateNumbersXOR(int[] nums) {int ans 0;long t 0;for(int x : nums){if(((t>>x)&1) 1){ans ^ x;}else{t | (…

图片去水印工具(低调用哦)

一、简介 1、它是一款专业的图像编辑工具&#xff0c;旨在帮助用户轻松去除照片中不需要的元素或修复照片中的缺陷。无论是修复旧照片、消除拍摄时的不良构图&#xff0c;还是删除照片中的杂乱元素&#xff0c;都能帮助用户快速实现这些目标。其功能强大且操作简单&#xff0c…

代码随想录算法训练营第36期DAY43

DAY43 343整数拆分 注意&#xff1a;当几个数的数值相近&#xff0c;乘积才会尽可能地大&#xff08;好想&#xff1a;数一大一小&#xff0c;最大当然是自己乘以自己&#xff09; 代码随想录官方题解&#xff1a; class Solution {public: int integerBreak(int n) { …