1、DuiLib的编译和运行

news2024/10/6 10:32:13

文章目录

  • 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/661808.html

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

相关文章

个人IP打造全过程:如何打造出属于自己的个人IP?

随着互联网的快速发展,个人IP已经逐渐成为一个热门话题。拥有自己的个人IP可以为你带来更多的机会和收益,让你在竞争激烈的市场中脱颖而出。但是,要想打造自己的个人IP并不是一件容易的事情。本文将为你介绍如何打造属于自己的个人IP。#IP# 一…

Burp Suite 功能详解(渗透测试工具)

一、抓包。 找到 代理--拦截--打开自带浏览器(这里也可以自己找扩展设置代理,但还要添加安全证书等等,我觉得太麻烦了,还不如直接使用Burp Suite自带的浏览器抓包)。 这是Burp Suite自带网页的页面。 点击开启拦截。 …

VMware Cloud Director Availability 4.6 | 灾难恢复和迁移 | DRaaS

VMware Cloud Director Availability 4.6 | 灾难恢复和迁移 | DRaaS 请访问原文链接:https://sysin.org/blog/vmware-cloud-director-availability-4/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VMware Cloud …

二维码在隐患排查中的应用:扫码上报,实时通知

正值安全生产月,对企业而言隐患排查是安全管理的重要环节,众多企业设立了安全部门,部门内的相关人员会定期对生产设备、作业场所、作业人员等进行检查,以确保安全隐患的消除,从而预防事故的发生。 传统的隐患排查主要…

2018年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2018年1月真题 四、写作:第56~57小题,共65分。其中论证有效性分析30 分,论说文35分。 56.论证有效性分析: 分析下述论证中存在的缺陷和漏洞,选择若干要点,写一篇600字左右的文章,对该论证的有…

掌握Spring Cloud:打造高效可靠的微服务生态系统

1、SpringCloud概述 Spring Cloud是一个用于构建分布式系统的开源框架,它提供了一系列的组件和工具,用于实现微服务架构中的各项核心功能。本文将重点介绍Spring Cloud中的关键组件,并详细探讨它们的功能和作用。 网关:Zuul/Gat…

自动化测试-selenium基础操作

元素操作 方法: 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法# 导包 from time import sleep from selenium import webdriver# 实例化浏览器 driver webdriver.Chrome()# 打开网址 driver.get(https://www.baidu.com/)# 需求 e…

HTTP项目常见状态码笔记(200,302,400,403,404,405,500...),

目录 认识 "状态码" (status code) 出现200 403 Forbidden 出现404 404 Not Found 出现 405 Method Not Allowed 出现 500 Internal Server Error 504 Gateway Timeout 302 Move temporarily 301 Moved Permanently 出现 "空白页面" 出现 &qu…

制作内网离线百度地图

下载离线地图瓦片 通过百度ak(没有的可以去百度官网自行申请下载),拉取下列git 项目,可以免费下载离线瓦片 https://gitee.com/jinqianwang/baidu-offline-map-download 目录结构: 使用步骤: 第一步&am…

Midjourney绘画常用聊天界面介绍

刚开始使用MJ (Midjourney) 的小伙伴可能对这个复杂的界面有点迷糊,网站也无法翻译。 实不相瞒刚开始的时候我也一脸懵逼,对于小白来说启动门槛很高,但是认识之后就一点也不复杂。 接下来我们分三步认识Midjourney的界面: 第一步: 打开Mid…

基于Java+Swing+Mysql实现酒店管理系统

基于JavaSwingMysql实现酒店管理系统 一、系统介绍二、功能展示1.用户登陆2.首页3.开房4.退房5.房间信息6、顾客信息 三、数据库四、其它1.其他系统实现2.获取源码 一、系统介绍 系统功能:用户登陆、验证码验证、开房、退房、房间信息、顾客信息 运行环境&#xf…

【im群发推送软件】(Apple Push Notification service):APNs 是苹果提供的推送服务

iMessage 推送需要您对苹果的推送服务和相关开发技术有一定的了解,并熟悉应用程序开发的相关知识。以下是一些关键的方面和步骤,供您参考: 开发者账号和证书:您需要注册苹果开发者账号,并获取开发者证书用于推送服务。…

PEFAT:通过伪损失估计和特征对抗训练增强半监督医学图像分类

文章目录 PEFAT: Boosting Semi-supervised Medical Image Classification via Pseudo-loss Estimation and Feature Adversarial Training摘要本文方法Feature Adversarial Training 实验结果 PEFAT: Boosting Semi-supervised Medical Image Classification via Pseudo-loss …

PIQN:Parallel Instance Query Network for Named Entity Recognition

原文链接:https://aclanthology.org/2022.acl-long.67.pdf ACL 2022 介绍 问题 将命名实体识别任务作为阅读理解任务(MRC:machine reading comprehensive)来做,存在3个问题: 1)一类问题只能提取…

腾讯云服务器可用区什么意思?怎么选择合适?

腾讯云服务器可用区是什么意思?可用区是指在同一个地域内电力和网络相互独立的区域,可用区可以做到故障隔离,所以可用区存在的意义在于构建高可用、高容灾应用,将应用部署在不同可用区内,一个可用区发生故障&#xff0…

Cisco MPLS VPN Option C1

一、拓扑 AR1和AR8是一家公司两个站点,现在通过MPLS VPN Option C1实现跨域互联 使用思科设备模拟 AR1到AR8各有一个loopback0接口分别是1.1.1.1 2.2.2.2 二、配置思路 1、先配置AS内底层网络 AR2 AR3 AR4配置eigrp实现互联 AR5 AR6 AR7同样方法 2、AS 10…

ChatGPT 更新:大杀器!函数调用示范

自ChatGPT 3.5/4 双双升级:更长,更便宜,更开放,更可控发出去之后,有朋友问怎么接入 API。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 什么是函数调用? 函数调用指 Chat-GPT 模型会自动逻辑判断后,调用在代…

如何让程序在后台隐藏窗口运行 - 静默运行器

有的时候你可能会想让一个程序或多个在后台运行,并隐藏其窗口界面。你可以使用静默运行器这款软件。 静默运行器是一款小巧的Windows系统工具软件,它可以轻松的让你在后台静默运行多个程序,隐藏程序窗口和界面,并提高或降低后台进…

在 Debian 12 上安装 KubeSphere 实战入门

老 Z,运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 知识点 定级:入门级KubeKey 安装部署 KubeSphere 和 KubernetesDebian 操…

【Python】函数进阶 ④ ( Lambda 匿名函数 | 具名函数与匿名函数 | Lambda 函数定义语法 )

文章目录 一、具名函数与匿名函数二、Lambda 函数定义语法三、代码示例 - Lambda 函数定义语法 一、具名函数与匿名函数 在 Python 中 , 使用 def 关键字定义的函数 是 " 具名函数 " , 也就是有名字的函数 ; 与 " 具名函数 " 相对应的是 " 匿名函数 …