DuiLib的编译和运行

news2024/11/25 21:38:07

文章目录

  • 1、原生DuiLib的编译和运行
      • 1.1、下载并解压成这个样子
      • 1.2、打开.sln解决方案文件
      • 1.3、编译成功
  • 2、网易DuiLib编译和运行
      • 2.1、下载并解压成这个样子
      • 2.2、打开.sln解决方案文件
      • 2.3、编译成功
  • 3、腾讯DuiLib编译和运行vs 2017
      • 3.1、下载并解压成这个样子
      • 3.2、打开.sln解决方案文件
      • 3.3、编译成功
  • 4、原生DuiLib的.lib和.dll静态库和动态库
      • 4.1、使用DuiLib先生成.dll动态库
      • 4.2、使用DuiLib生成静态库
      • 4.3、编写一个win32项目
        • 4.3.1、新建项目
        • 4.3.2、配置项目
        • 4.3.3、包含头文件以及使用DuiLib命令空间
        • 4.3.4、编写入门简单程序使用.dll动态库
      • 4.3.5、编写入门简单程序使用.lib动态库
          • 4.3.5.1、生成lib静态库,正确编译 Duilib 静态库的方法
            • 4.3.5.1.1、添加官方 DuiLib_Static 项目
        • 4.3.5.2、在项目预处理器中添加UILIB_STATIC
        • 4.3.5.3、添加DuiLib_d.lib静态库
        • 4.3.5.4、再次编译出现如下问题
        • 4.3.5.5、放在任意目录下都可以运行

1、原生DuiLib的编译和运行

原生DuiLib地址:DuiLib地址 。

在这里插入图片描述

1.1、下载并解压成这个样子

在这里插入图片描述

1.2、打开.sln解决方案文件

在这里插入图片描述

原生DuiLib默认是多字节多字符集、以及默认生成 .dll 动态库。

1.3、编译成功

在这里插入图片描述

bin目录下,生成了各种**.exe可执行文件以及.dll**动态库:

在这里插入图片描述

2、网易DuiLib编译和运行

github地址:网易DuiLib 。

在这里插入图片描述

2.1、下载并解压成这个样子

在这里插入图片描述

2.2、打开.sln解决方案文件

在这里插入图片描述

2.3、编译成功

在这里插入图片描述

bin目录下,生成了各种 .exe 可执行文件以及在libs目录下 .lib 静态库:
在这里插入图片描述

在这里插入图片描述

3、腾讯DuiLib编译和运行vs 2017

3.1、下载并解压成这个样子

在这里插入图片描述

3.2、打开.sln解决方案文件

3.3、编译成功

4、原生DuiLib的.lib和.dll静态库和动态库

4.1、使用DuiLib先生成.dll动态库

生成目录:
在这里插入图片描述

在这里插入图片描述

4.2、使用DuiLib生成静态库

生成目录:
在这里插入图片描述

在这里插入图片描述

4.3、编写一个win32项目

4.3.1、新建项目

在这里插入图片描述

出来这个界面:
在这里插入图片描述

在这里插入图片描述

4.3.2、配置项目

多字节多字符集:

在这里插入图片描述

配置头文件目录:

在这里插入图片描述
在这里插入图片描述

配置库目录:

在这里插入图片描述

在这里插入图片描述

4.3.3、包含头文件以及使用DuiLib命令空间

在这里插入图片描述

编译没有问题就说明配置DuiLiB包含成功:

在这里插入图片描述

4.3.4、编写入门简单程序使用.dll动态库

// new_test_demo.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "new_test_demo.h"

#include"UIlib.h"
using namespace DuiLib;

class CFrameWindowWnd : public CWindowWnd, public INotifyUI
{
public:
	CFrameWindowWnd() { };
	LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); };
	UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };
	void OnFinalMessage(HWND /*hWnd*/) { delete this; };

	void Notify(TNotifyUI& msg)
	{
		if (msg.sType == _T("click")) {
			if (msg.pSender->GetName() == _T("closebtn")) {
				Close();
			}
		}
	}

	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
	{
		if (uMsg == WM_CREATE) {
			m_pm.Init(m_hWnd);
			CControlUI *pButton = new CButtonUI;
			pButton->SetName(_T("closebtn"));
			pButton->SetBkColor(0xFFFF0000);
			m_pm.AttachDialog(pButton);
			m_pm.AddNotifier(this);
			return 0;
		}
		else if (uMsg == WM_DESTROY) {
			::PostQuitMessage(0);
		}
		LRESULT lRes = 0;
		if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;
		return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
	}

public:
	CPaintManagerUI m_pm;
};

// 程序入口及Duilib初始化部分
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{
	CPaintManagerUI::SetInstance(hInstance);
	CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

	CFrameWindowWnd* pFrame = new CFrameWindowWnd();
	if (pFrame == NULL) return 0;
	pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
	pFrame->ShowWindow(true);
	CPaintManagerUI::MessageLoop();

	return 0;
}

编译:

在这里插入图片描述

运行的时候会报错,缺少 .dll 动态库:

在这里插入图片描述

只需要把**.dll动态库放到和.exe**同级目录即可。
在这里插入图片描述

再次运行成功:
在这里插入图片描述

4.3.5、编写入门简单程序使用.lib动态库

4.3.5.1、生成lib静态库,正确编译 Duilib 静态库的方法
4.3.5.1.1、添加官方 DuiLib_Static 项目

在官方的代码中有一个 DuiLib_Static.vcxproj 的工程文件,这就是 DuiLib 的静态库编译的工程。

在这里插入图片描述

**(这里已经修改过的)**但是细心的人可能发现了,仅有一个 .vcproj 的项目文件,没有 .filters 的文件目录树描述文件。没关系,我们直接复制一份 Duilib.vcxproj.filters 文件改名为 Duilib_Static.vcxproj.filters 即可,这个文件只是描述在 vs 中看到的文件目录结构,静态库和动态库都使用一样的目录树即可。修改完成后是下面这幅图的样子:
在这里插入图片描述

我们增加了 Duilib_Static.vcxproj.filters 的文件,此时我们把这个工程添加到 duilib 的解决方案中。然后打开DuiLib_Static.vcxproj编译:

在这里插入图片描述

这样就生成了DuiLib_d.lib静态库。

在这里插入图片描述

4.3.5.2、在项目预处理器中添加UILIB_STATIC

在这里插入图片描述

4.3.5.3、添加DuiLib_d.lib静态库

在这里插入图片描述

在这里插入图片描述

4.3.5.4、再次编译出现如下问题

在这里插入图片描述

修改C++运行库为多线程调试:
在这里插入图片描述

在这里插入图片描述

再次编译:

在这里插入图片描述

4.3.5.5、放在任意目录下都可以运行

在这里插入图片描述

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

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

相关文章

使用 Node.js、K8s 和分布式 SQL 构建世界上最具弹性的待办事项列表应用程序

本文演示了如何使用 Kubernetes (K8s) 和分布式 SQL 构建云原生 Node.js 应用程序。 开发可扩展且可靠的应用程序是一项热爱的工作。一个云原生系统可能包括单元测试、集成测试、构建测试,以及用于构建和部署应用程序的完整管道,只需单击一个按钮即可。 …

【计算机网络】第二章应用层-电子科技大学2023期末考试

第二章 应用层 应用层协议原理 网络应用程序体系结构 客户机/服务器体系结构:至少有一个服务器,一个客户机,其中服务器总是打开的,具有固定的众所周知的IP地址,主机群集常被用于创建强大的虚拟服务器,而客…

【Trino实战】Trino下ORC与Parquet查询性能分析

Trino下ORC与Parquet查询性能分析 环境 OS:CentOS 6.5 JDK:1.8 内存:256G 磁盘:HDD CPU:Dual 8-core Intel Xeon CPU (32 Hyper-Threads) E5-2630 v3 2.40GHz HDFS:2.9.2 Hive:2.3.9 T…

[n00bzCTF 2023] CPR 全

Crypto AES 给了java的加密原码,AES加密,有key import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; import java.n…

arima模型原理及实战

目录 1,概念 2,数学知识 3,前提条件 4,序列不平稳时的平稳性方法 5,模型定阶,确定P和Q 6,模型训练与检验 1,概念 ARIMA模型(英语:Autoregressive Integr…

grep及文本处理命令

正则表达式 一.基础命令 1.grep命令 对文本的内容进行过滤,针对行处理 1.1grep格式 grep [选项]…查找条件 目标文件 1.2grep命令选项 -m数字——————匹配几次后停止eg:grep -m 1 root /etc/passwd————————————多个匹配只取 -v …

【编程语言 · C语言 · 递归函数】

递归函数 C 语言的函数都支持递归, 也就是说,每个函数都可以直接或者间接第调用自己。所谓的间接调用,是指在递归函数调用的下层函数中再调用自己。 递归关系图如下: 递归之所以能实现,是因为函数的每个执行过程在栈中都有自己的…

深入理解 SpringBoot 日志框架:从入门到高级应用——(三)Logback 输出日志到 MySQL 数据库

文章目录 添加依赖导入 SQL 文件配置 logback-spring.xml运行结果 Logback 是一个开源的日志框架,它支持多种日志输出方式,包括控制台输出、文件输出、邮件输出等。如果要将 Logback 输出的日志保存到 MySQL 数据库中,可以按照以下步骤进行配…

Tapd在研发团队中的使用技巧-持续更新ing

1.TAPD第三方服务集成能力,支持与代码仓库、流水线进行了深度打通,力求为开发团队提供流畅高效的使用体验。我们梳理了一份攻略,掌握下面几个小技能,让TAPD与代码仓库、流水线一起,成为研发团队的得力助手,…

数据结构算法刷题(27)回溯(子集型)

回溯思想: 思路:这种出现全部xx组合的,基本都是回溯算法。首先,当digits是空,那返回也是空。当回溯到边界条件的时候,就更新答案,在非边界条件的时候,循环该数值下的全部情况。 cla…

125760-33-0,Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH,于蛋白质糖基化修饰

文章关键词:糖化学试剂,化学试剂,糖基氨基酸一、试剂基团反应特点(Reagent group reaction characteristics): Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH中蛋白质糖基化修饰是在糖基转移酶的催化作用下糖链分子…

色环电阻介绍

复习一下色环电阻,是在电阻封装上(即电阻表面)涂上一定颜色的色环,来代表这个电阻的阻值。色环实际上是早期为了帮助人们分辨不同阻值而设定的标准。色环电阻现在应用还是很广泛的,如家用电器、电子仪表、电子设备中常常可以见到。但由于色环…

Java内存模型(JMM)和volatile原理

一、Java 内存模型 JMM即Java Memory Model,他定义了主存(共享的数据)、工作内存(私有的数据)抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等 JMM体现以下几个方面 原子性-保证指令不会受…

ad18报错:Minimum Solder Mask Sliver Constraint

报告上提示: Minimum Solder Mask Sliver (Gap0.254mm) (All),(All) Minimum Solder Mask Sliver Constraint,PCB焊盘阻焊层之间间距小于0.254报错 修改了这里,把这个报警值改小一些,就不会报警了 翻译过来是:最小…

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 ==> 消息卡片、websocket、socket.io、约定通讯规则、建立连接

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 > 消息卡片、websocket、socket.io、约定通讯规则、建立连接 问诊室-路由与组件 目标:配置路由和分析结构 1)路由配置 {path: /room,component: () > import(/views/room/index.vue)…

UNIX网络编程卷一 学习笔记 第二十章 广播

本书迄今为止的所有例子都是单播:一个进程与另一个进程通信。TCP只支持单播寻址,而UDP和原始IP还支持其他寻址类型,下图比较了不同的寻址方式: IPv6往寻址体系中增加了任播(anycasting)方式。RFC 1546讲述…

章节5:04-shiro反序列化漏洞

章节5:04-shiro反序列化漏洞 复现环境 本地tomcat或Docker vulhub 基础环境: IDEA Maven Tomcat Burp JDK8版 01 Shiro介绍 Shiro Apache Shiro:开源安全框架 身份验证授权会话管理加密 本地代码 https://github.com/apache/shi…

Iptables防火墙策略

目录 一、iptables netfilter/iptables 关系 二、四表五链 三、iptables的安装 iptables 命令行配置方法 管理选项 一、iptables Linux 系统的防火墙——netfilter/iptables IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络…

MATLAB与大数据:如何应对海量数据的处理和分析

第一章:引言 在当今数字化时代,大数据已经成为了各行各业的核心资源之一。海量的数据源源不断地涌现,如何高效地处理和分析这些数据已经成为了许多企业和研究机构面临的重要挑战。作为一种功能强大的数学软件工具,MATLAB为我们提供…

深度剖析InnoDB存储结构

大家都知道 MySQL 的数据都是存储在物理磁盘上的,那具体是保存在哪个文件呢?我们首先要知道MySQL 存储的行为是由存储引擎实现的,不同的存储引擎保存的文件自然也不同。由于InnoDB 是我们常用的存储引擎,也是 MySQL 默认的存储引擎…