封装hiredis成dll包,为老项目提供redis网络支持

news2024/12/23 11:22:57

第一步:准备VS环境

1、需要下载window8.1的SDK否则无法下载

2、平台工具集需要使用Visual Studio 2015(v140)

第二步:下载hiredis

去microsoft/hiredis下载windows版本的hiredis,并解压到本地

 打开hiredis-master\msvs\vs-solutions中的sln,点击生成。

在这里插入图片描述

将会得到如下的文件:
在这里插入图片描述

第三步:动态链接库(DLL)

1、创建DLL工程

流程:文件 -> 新建 -> 项目 -> 动态链接库(DLL)-> Next  - > 填写项目名。

图1:DLL项目创建

 图2:DLL项目名设置

 2、等待项目生成

等待项目生成后项目结构如下图。

 

3、配置依赖

点击项目按右键,选择在文件夹中打开项目

 项目结构如下所示(其中Debug\、x64\文件夹是生成的,可忽略):

新建lib文件夹include文件夹和。lib文件夹包含上一步得到的.lib文件和.pdb文件。include文件夹包含hiredis\,win32_interop\和adapters\三个文件夹,分别对应hiredis-master\,msvs\win32_interop\和hiredis\adapters\下所有的.h文件。

添加包含目录、库目录:

 添加额外的依赖项:

 添加编译头:
在预处理器定义中添加如下字符:_CRT_SECURE_NO_WARNINGS

在这里插入图片描述

 4、其它配置

修改代码生成设置:
在这里插入图片描述

在C/C++中选择代码生成,并选择运行库,在运行库中选择MDd模式。

 

 在配置属性常规中选择配置类型为动态库。

 设置平台SDK

 设置平台工具集

 第三步:撰写代码并编译

 RedisUtils.h

extern "C" REDISUTILS_API int testRedis(char* host, int input_port);

RedisUtils.cpp

REDISUTILS_API int testRedis(char* host, int input_port) {
	
	
	unsigned int j;
	redisContext* c;
	redisReply* reply;
	const char* hostname = host;
	int port = input_port;
	struct timeval timeout = { 1, 500000 }; // 1.5 seconds
	c = redisConnectWithTimeout(hostname, port, timeout);
	if (c == NULL || c->err) {
		if (c) {
			printf("Connection error: %s\n", c->errstr);
			redisFree(c);
		}
		else {
			printf("Connection error: can't allocate redis context\n");
		}
		exit(1);
	}

	/* PING server */
	reply = (redisReply*)redisCommand(c, "PING");
	printf("PING: %s\n", reply->str);
	freeReplyObject(reply);

	/* Set a key */
	reply = (redisReply*)redisCommand(c, "SET %s %s", "foo", "hello world");
	printf("SET: %s\n", reply->str);
	freeReplyObject(reply);

	/* Set a key using binary safe API */
	reply = (redisReply*)redisCommand(c, "SET %b %b", "bar", (size_t)3, "hello", (size_t)5);
	printf("SET (binary API): %s\n", reply->str);
	freeReplyObject(reply);

	/* Try a GET and two INCR */
	reply = (redisReply*)redisCommand(c, "GET foo");
	printf("GET foo: %s\n", reply->str);
	freeReplyObject(reply);

	reply = (redisReply*)redisCommand(c, "INCR counter");
	printf("INCR counter: %lld\n", reply->integer);
	freeReplyObject(reply);
	/* again ... */
	reply = (redisReply*)redisCommand(c, "INCR counter");
	printf("INCR counter: %lld\n", reply->integer);
	freeReplyObject(reply);

	/* Create a list of numbers, from 0 to 9 */
	reply = (redisReply*)redisCommand(c, "DEL mylist");
	freeReplyObject(reply);
	for (j = 0; j < 10; j++) {
		char buf[64];

		snprintf(buf, 64, "%d", j);
		reply = (redisReply*)redisCommand(c, "LPUSH mylist element-%s", buf);
		freeReplyObject(reply);
	}

	/* Let's check what we have inside the list */
	reply = (redisReply*)redisCommand(c, "LRANGE mylist 0 -1");
	if (reply->type == REDIS_REPLY_ARRAY) {
		for (j = 0; j < reply->elements; j++) {
			printf("%u) %s\n", j, reply->element[j]->str);
		}
	}
	freeReplyObject(reply);

	/* Disconnects and frees the context */
	redisFree(c);

	return 0;
}

编译代码:

右击项目点击生成

 生成完毕后会在Debug目录下生成对应的dll文件 

项目地址:

下面是项目的github地址,大家可以去看看:GitHub - 1756336885/RedisUtils: C++封装的DLL包,可以为一些老项目提供redis支持

参考文章:

Windows下使用hiredis各种常见问题(折磨死人了)_hiredis windows_无极之剑的博客-CSDN博客

C++编写Config类读取配置文件_vc++ 判断config 在不在_David_xtd的博客-CSDN博客

无法打开源文件 ctype.h和.exe 进行写入_无法打开源文件ctype.h_河西石头的博客-CSDN博客

hiredis在windows下的编译以及使用_hiredis windows_持久决心的博客-CSDN博客

redis++的编译,安装,使用_redis++库_YZF_Kevin的博客-CSDN博客

https://www.cnblogs.com/javaxubo/p/16684647.html

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

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

相关文章

linux之Ubuntu系列 find 、 ln 、 tar、apt 指令 软链接和硬链接 snap

查找文件 find 命令 功能非常强大&#xff0c;通常用来在 特定的目录下 搜索 符合条件的文件 find [path] -name “.txt” 记得要加 “ ” 支持通配符 &#xff0c;正则表达式 包括子目录 ls 不包括 子目录 如果省略路径&#xff0c;表示 在当前路径下&#xff0c;搜索 软链接…

GPT 如此强大,我们可以利用它实现什么?

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer结构的预训练语言生成模型&#xff0c;由OpenAI研发。它可以生成高质量的自然语言文本&#xff0c;取得了很好的效果&#xff0c;被广泛应用于各个领域。以下是一些利用GPT实现的应用。 一…

01-复杂度1 最大子列和问题

中国大学MOOC-陈越、何钦铭-数据结构-2023夏季 题目集 题目 思路 令f(n)表示以第n个数结尾的连续序列的最大和&#xff0c;则状态转移方程为&#xff1a; 解释&#xff1a;如果f(n-1)小于零&#xff0c;代表对f(n)的值贡献为负。故&#xff0c;以为结尾的最大子列和就是&…

【Hydro】一个简单的HBV水文模型产流Python实现

说明 HBV模型包括一系列自由参数&#xff0c;其值可以通过率定得到。同时也包括一些描述流域和气候特征的参数&#xff0c;它们的值在模型率定是假定不变。子流域的划分使得在一个子流域中可能有很多参数值。虽然在大多数应用中&#xff0c;各子流域之间参数值只有很小的变化&a…

【已解决】idea使用debug启动一直卡着不动

debug启动时一直卡着不动出现下图提示&#xff0c;但是正常启动又可以启动 翻译结果是&#xff1a;方法断点可能会大大降低调试速度。很明显&#xff0c;有断点的位置没加对或者误加断点了&#xff0c;以下是解决方法。 打开 .idea文件夹&#xff0c;找到workspace.xml文件 找…

基于Javaweb实现ATM机系统开发实战(九)存款功能实现

先看前端界面确定后端需要处理的参数&#xff0c;把一些参数进行修改&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <% taglib prefix"c" uri"http://java.sun.com…

JavaScript运算符优先顺序

● 我们可以通过MDN去查看运算符的优先级 ● 可以看到运算符是从左到右还是从右到左进行运算的&#xff1b; let x, y; x y 25 - 10 - 5; console.log (x, y);上面的运算会现实10 10&#xff0c;为什么会得到这样的结果呢&#xff1f;因为你查看mdn那个表你会发现&#xf…

使用Jquery为页面添加元素,并设置元素的背景图片时,背景图总会延迟几秒才会出现的问题

介绍 使用 jquery&#xff0c;为页面添加元素时&#xff0c;同时动态设置元素的背景图&#xff0c;总是会导致背景图延迟几秒才会出现&#xff0c;如下图所示&#xff1a; 解决方式 创建一个 image 对象&#xff0c;定义 image 对象的 src 属性&#xff1b;在 image 对象的 o…

Linux搭建node环境-MobaXterm+node+pm2安装

1.登录session 2.安装X11-forwarding 我也不知道这个有什么用&#xff0c;但是有个叉叉在那里有点难受&#xff0c;就把它解决了什么是X11-forwarding&#xff1f;怎么使用&#xff1f; yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Ty…

软件架构介绍

一、定义 软件架构&#xff1a;可以简单理解为满足干系人关键诉求的一系列宏观决策。 二、软件质量属性 软件架构师大部分时间在解决以下产品质量模型中的质量属性问题。 三、程序员和架构师区别 从思维逻辑方面来看&#xff0c; 程序员从功能和业务逻辑方面去想问题。 架…

​大华智慧园区综合管理平台存在任意文件上传漏洞

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 大华智慧园区综合管理平台简介 大华智慧园区综合管理…

HTML5学习简记

目录 HTML定义 标签 HTML基本骨架 常见标签 标题标签 段落标签 换行与水平线标签 文本格式化标签 图像标签 绝对路径与相对路径 超链接标签 音频与视频标签 列表标签 无序列表 有序列表 定义列表 表格标签 表格结构标签 合并单元格 表单标签 input标签 input标签占…

前端工程化第一章:webpack5基础(上)

文章目录 1. 什么是webpack&#xff1f;2. webpack使用2.2. 前置知识2.1. 创建一个项目 3. webpack打包3.1. 创建一个webpack.config.js文件3.2. 入口&#xff08;entry&#xff09;3.2.1. webpack.config.js3.2.2. src/index.js3.2.3. package.json 3.3. 输出&#xff08;outp…

SpringMvc异常处理机制

预期异常和运行异常&#xff0c;前者通过捕获&#xff0c;后者通过规范代码开发、测试等手段减少发生概率。 系统dao层、service层、controller层出现都可通过throws Exception向上抛出&#xff0c;最终由SpringMvc前端控制器交由异常处理器进行异常处理。 SpringMvc项目异常处…

有必要买apple pencil吗?ipad触控笔推荐平价

科技的飞速发展改变了人们的生活。在各种电子、数码产品不断涌现的今天&#xff0c;这款能与平板电脑相匹配的电容笔就应运而生了。随着国内的电容笔技术的进步&#xff0c;它的使用领域也在不断地扩展&#xff0c;逐渐开始取代苹果原装电容笔。下面&#xff0c;我将为大家介绍…

IDEA使用GIT提交代码中文日志(commit message)乱码

最近换了新的开发环境&#xff0c;导致提交gti中文注释乱码&#xff0c;遂记录一下解决方案 idea中查看git提交信息显示中文是正常的 gitee上显示乱码 本地显示也是乱码 一、命令修改编码格式 git 安装目录下执行 git config --global i18n.commitencoding utf-8git config …

《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(6)-Charles安卓手机抓包大揭秘

1.简介 Charles和Fiddler一样不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Charles也能截获 Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。 今天宏哥讲解和分享Charles如何截获安卓移动端发出的 HTTP/HTTP…

2023 年 7 月中旬使用各种随身 wifi 的电脑无法上网的解决方法

微软近日推送了安全更新&#xff0c;在 Win10 下编号为 KB5028166&#xff0c;在 Win11 下编号为 KB5028185。此补丁会导致部分电脑无法上网&#xff0c;主要是使用了各种品牌的随身 Wifi 的电脑。 具体症状表现为从控制面板的网络连接&#xff08;ncpa.cpl&#xff09;打开详细…

vue项目展示pdf文件

记录贴 最近我有个需求,就是在h5页面上展示pdf文件,分页,最后一页有个蒙层阴影渐变的效果,尝试过一些插件,但都不是很好用,最后用了pdfjs-dist加上canvas 可以看下效果 先下载: npm i pdfjs-dist2.5.207下面展示代码 html: <template><canvas v-for"pageNumb…

浅谈设计模式之单例模式

0 单例模式简介 单例模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。单例模式指的是单一的一个类&#xff0c;该类负责创建自己的对象&#xff0c;并且保证该对象唯一。该类提供了一种访问其唯一对象的方法&#xff0c;外部需要调用该类的对象可以通过方法获…