- 博客(48)
- 资源 (1)
- 收藏
- 关注
原创 VS2019和boost编译支持xp系统
前言 最近要做个守护程序来监听一个http程序,故想到了windows的服务程序。因为大量用户使用xp系统,所以要兼容xp。 我用的是vs2019和boost库。两个都需要设置,才能保证程序在xp下能跑。vs2019 设置 根据网上的资料,先添加支持xp的编译组件。我之前没有安装VS 2017 x64/x86生成工具,导致程序一直运行不起来。把项目的属性的平台工具集改成v141xp,这一步应用之后,vs会自动帮你修改一些参数。参考文章:VS2019怎样编译出可以在WinXP上运行的ex
2021-12-02 11:20:53 1698 1
原创 记录下奇奇怪怪的问题
innosetup打包的安装包不能安装,提示错误786:管理员用策略规则%2限制了对%1的方法:查看过软件策略,并没有任何策略,也重置过策略。网上只找到一个关于此问题的回答:微软社区回答导入不了根证书,手动导入提醒成功,但是在证书管理中并没有该证书参考文章1:VISTA导入证书时,根证书无法导入参考文章2:农行根证书打死看不到(导入到受信任的根证书)以上文章均没有解决我的问题,使用管理员修改注册表一直提醒没有权限。奇葩的防火墙策略,防火墙会阻挡对127.0.0.1的访问。这个遇到很多注记.
2021-09-22 16:41:08 3872
原创 深入理解COM(一)
前言最近需要深入学习下COM,来解决工作上的问题。本文根据《COM原理与应用》这本书来写的。COM简单介绍COM是微软提出的组件标准,它定义了组件程序之间进行交互的标准,提供了组件程序运行所需的环境。进程内组件:指的是dll进程外组件:指的是exe组件程序可能会包含多个组件对象,所以程序与程序进行通信时,通信双方为COM对象。COM的历史发展随着桌面程序之间的交互不断深入,在OLE技术发展过程中产生了COM。大家都知道Windows操作系统,可以将一个应用程序里面写的文字复制到另一个程序
2021-08-18 14:56:50 4255
原创 在同一台机器上启动两个mysql并启动主从
前言首先机器上已经有了一台mysql服务,找到mysql的安装位置复制一份。主数据库修改修改my.cnf将/etc/my.cnf修改为:[mysql]# 设置mysql客户端默认字符集#default-character-set=utf8#[mysqld]#skip-name-resolve## #设置3307端口#port = 3307#设置socket文件位置(重点)socket=/usr/local/mysql/data/mysql.sock#设置mysqlx
2021-07-15 10:16:50 933 1
原创 JVisualVM连接远程Linux服务器
前言使用JVisualVM远程监控服务器Tomcat运行情况修改tomcat配置第一步:修改catalina.sh很多文章上都是添加CATALINA_OPTS变量,我试了之后发现停止报命令缺少。正确的方式是在第一行上添加JAVA_OPTS变量,内容如下:JAVA_OPTS="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.0.15 -Dcom.sun.management.jmxremote.rmi.port=8
2021-07-15 10:15:54 1201 1
原创 深刻理解C语言标准
前言本文章内容有点长,建议耐心看完,会对C语言的语法有更深的印象。C语言的起源C语言起源于B语言,B语言起源于ALGOL(简称:A语言)。可以画图表示:A语言和B语言已经落伍了,我们可以不用管它们。C语言的特点C语言具有高效、强大而灵活,尤其在嵌入式开发。C语言比较靠近底层(除了汇编之外),学习它之后,学习任何语言都将事功半倍。C语言的标准概述C语言刚开始诞生的时候没有统一的标准,后来出现了一个K&R标准,但是这个标准并不完善。只定义了C语言而没有定义C库。C89标准又可以成为A
2021-07-15 10:11:22 2538 2
原创 boost入门(四):Asio实现网络通信
前言上篇介绍了Asio的简单应用,这篇接着介绍Asio如何实现网络通信。TCP 通信服务端同步TCP通信#define _CRT_SECURE_NO_WARNINGS#include <ctime>#include <iostream>#include <string>#include <boost/asio.hpp>using boost::asio::ip::tcp;//创建返回给客户端的信息std::string make_da
2021-04-19 16:58:31 4021 1
原创 boost入门(三):Asio简单示例
前言上一篇简单介绍了Asio的同步和异步原理图,这篇接着介绍Asio的简单示例。使用成员函数作为回调函数#include <iostream>#include <boost/asio.hpp>#include <boost/bind/bind.hpp>class printer{public: //初始化I\O对象 printer(boost::asio::io_context& io) : timer_(io,
2021-04-19 16:57:19 1223
原创 QT入门学习(一):什么是QT
QT 是什么?QT是一个跨平台C++图形用户界面应用程序开发框架。它不仅可以开发GUI程序,也可以开发非GUI程序。我们通常使用QT开发GUI程序。它可以开发Windows、Linux、Mac平台的应用程序。也可以开发移动端应用程序以及嵌入式程序。QT 模块QT 有模块的概念,简单来说就是把功能飞分块。比如你收拾屋子,会把衣服都放在衣柜中,鞋子摆在鞋架上,厨房用具会摆在厨房中。QT 可以划分为两个大模块:Essentials Modules(基础模块)和Add-on Modules(扩展模块),基
2021-04-19 14:17:00 5651 1
原创 boost入门(二):Asio的编译
前言经过上一篇文章《boost入门:boost简介》,我们编译了boost库。下面我们学习下Asio。Asio是不需要编译成lib文件,直接在程序中引入头文件即可。Asio依赖的库比较多,我们可以看下它的依赖:Boost.System(必须)Boost.Coroutine(可选),如果用spawn()启动协程就需要它Boost.Regex(可选),如果使用带参数的read_until()或async_read_until()重载boost::regexOpenSSL(可选),如果
2021-04-19 14:09:56 4174
原创 boost入门(一):boost简介
前言发现自己做为C++,竟然没有用过boost。特地学习下如何使用boost,我作为初学者,会从入门指南开始,一点点深入了解boost。本文采用的版本是boost 1.75.0boost 介绍boost 是一个跨平台的C++工具库,是的,没错!相当于一个大的工具集合。当然boost没有那么全面,比如界面库就没有。首先到官网下载boost,我选择的是boost 1.75.0 Windows版本。可以阅读发行版本的文档,来查看boost包含有哪些工具,我就不一一列出来,可以去boost 1.75.0
2021-04-19 11:56:25 18560 4
原创 记录下国产机远程
前言最近一段时间,断断续续测试国产化软件适配情况。国产机一般在政府机构,需要远程访问。目前已远程过银河麒麟、统信UOS系统,发现不同的操作系统用的远程软件不同。银河麒麟远程因为银河麒麟版的应用商店并没有远程软件,所以需要下载xrdp,然后通过Windows桌面远程。具体操作在网上可以搜到。统信UOS远程统信UOS比较特殊,它的应用商店有向日葵,安装之后如果能远程上就可以用向日葵远程。至于xrdp远程,我试过登录不上去。如果远程不上,则需要下载一个ToDesk Linux版进行远程,目前是测试版本
2021-04-13 17:25:05 1121
原创 MFC如何将二维码渲染到界面上
前言之前的一个项目,涉及到C++界面包装ocx,当调用界面的一个方法时会弹窗二维码,二维码直接渲染到控件上(对话框)。使用的二维码库是qrencode,其中还遇到一个困难,C++界面缩放时,ocx界面不跟着缩放,那个问题解决很简单,只需要在Size事件中改变内部的ocx大小即可。下面不多说,进入界面如何渲染二维码。实现void QRCodeDialog::OnPaint(){ CPaintDC dc(this); // device context for painting COLORREF
2021-04-13 10:49:20 664 1
原创 研究下以前抄的C++版Windows服务
前言以前做项目需要用到Windows服务,于是随便在网上找了一篇C++版的Windows服务代码,封装的很好,直接拿来用就可以。现在项目需求发生了一点小变化,需要服务时刻监听启动的exe是否异常,如果异常就重新启动。于是研究下代码,顺便熟悉下Windows服务。文件构成整个文件有两部分构成CServiceBase类ServiceInstall文件,包含安装、卸载、更新服务描述程序入口处理因为我们最终需要打包自动安装,卸载程序的时候自动卸载服务,所以在main函数中可以通过参数判断,程序是
2021-04-13 10:27:16 324
原创 sxstrace跟踪激活上下文
前言sxstrace 操作有两步,第一步先跟踪生成etl文件。第二步解析etl文件,输出日志到文件中。跟踪应用程序创建激活上下文首先命令行输入:sxstrace Trace -logfile:sxsTrace.etl然后启动要追踪的exe程序,然后再关闭程序。(如果启动不起来,只需要点击弹窗的确认按钮)随后在命令行回车,结束跟踪程序。这个时候已生成etl文件解析etl文件命令行输入:sxstrace Parse -logfile:sxsTrace.etl -outfile:a.txt
2021-04-07 16:34:43 399
原创 使用清单Manifest免注册调用COM组件
前言虽然ActiveX已被淘汰,但是又没有新的解决方案来替代ActiveX,好多公司都会使用ActiveX解决网页调用本地资源。ActiveX最容易注册出现问题,所以我们接上一篇关于微软的Manifest的那些事,我们谈下如何运用清单Manifest,来实现免注册调用COM组件,也就是调用ActiveX。准备工作首先准备一个工具regsvr42.exe,用来提取com组件的注册信息,在命令行中输入regsvr42 JITCertActiveX.dll然后就生成了一个JITCertActiveX
2021-04-07 16:31:20 1677
原创 关于微软的Manifest的那些事
什么是Manifest?在Windows中,manifest(清单)是一个XML文件,根据清单类型不同,可以分为四种:Manifest描述程序集清单描述名称、版本、资源、依赖的side-by-side程序集应用程序清单描述共享的side-by-side的程序集版本和名称,可能包含私有side-by-side的程序集元数据应用程序配置文件重定向每一个应用程序依赖的程序集版本发布者配置文件使用发布者配置重定向一整块的程序集版本程序集清单要想理解程序集清
2021-04-07 16:28:00 4494 4
原创 常见注册表意义
前言 最近老是遇到安装软件后环境不正常,有些软件安装时并不检测是否在运行,结果安装完之后需要重启电脑,还有一些不提示重启电脑但是安装完之后发现环境还是不正常。排查问题需要关注注册表,再次把我经常需要用到的注册表项列出来。注册表项关于重启电脑删除文件的注册表项HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\PendingFileRenameOperationsHKEY_LOCAL_MACHINE\SYSTEM\Cur
2021-03-25 15:19:30 389
原创 调用函数去安装根证书
前言 使用程序去安装根证书的目的是:使用自签的证书给软件进行签名,安装根证书之后,电脑就会信任该自签名软件,不会进行拦截。当然可以的话,掏钱买证书比较好。我见过有些软件会安装根证书,但都是key驱动或者CA厂家。安装根证书需要用户手动点击确定按钮,就好比你是否同意我们的协议。 以下的证书都是cer证书,base64内容。其他格式可以转成cer格式证书的安装 证书安装需要几个步骤,1. 读取证书内容2. 解析证书内容,并得到证书上下文3. 添加或删除以及判断证书是否安装读取证书内容
2021-03-16 17:49:45 328 2
原创 wxWidgets多线程及事件传递
前言 最近忙着写项目,wxWidgets计划还有wxWidgets日志系统的拦截重定向,剩下一些比较杂的知识点,想到哪写到哪。比如进程间通信、调用外部程序后结束本程序(用于升级程序)、集成带窗口的ActiveX、创建单进程程序等,这些文档上基本都有。下面开始多线程的应用。代码示例 废话不多说,此示例演示,子线程进程业务处理完之后通知主线程,等待主线程执行完,子线程接着处理业务的过程。 主要内容在主窗口文件和线程文件里面 主窗口头文件:/**************************
2021-03-08 15:22:49 1102
原创 wxWidgets 事件学习
前言wxWidgets事件连接有两种方式1. 静态事件表(写法简单)2. 动态连接事件(适合动态生成控件的事件)动态连接事件可以传递参数,适合自动生成一些控件静态事件表主窗口头文件:#ifndef STATICEVENTTABLEFRAME_H#define STATICEVENTTABLEFRAME_H#include <wx/wx.h>class StaticEventTableFrame: public wxFrame{ public: S
2021-02-25 09:04:14 452
原创 wxWidgets 自绘窗口
前言 目前很多应用程序界面的标题栏都是自绘的,wxWidgets如果想要达到360安全卫士那种效果就需要重新定义一个Frame。自绘Frame窗口 首先定义一个自定类,这个类继承wxFrame,在里面重写wxFrame:头文件如下:#ifndef WXSKINXFRAME_H#define WXSKINXFRAME_H#include <wx/wx.h>#include <wx/image.h>class wxSkinXFrame : public wxFra
2021-02-23 17:26:32 1715 1
原创 Cairo学习(一)
Cairo 介绍最近在看Cairo,准备做ofd生成图片。技术选型选了几天,编译过Mesa3D,但是好像不太适合。最后选择Cairo 2D绘图库,因为是在Linux下跑的,特地安装了个CentOS7编译Demo,发现可以运行。Cairo有直接绘制图片,也有渐变和矩阵转换,比较适合。Windows编译和Linux编译参考官网:https://www.cairographics.org/download/绘图之前需要理解几个概念:surface(画布)context(上下文)path(路径)ma
2020-10-14 11:46:15 5479 1
原创 王爽汇编学习(三)
标志寄存器标志寄存器有以下三个作用:用来存储相关指令的某些执行结果用来为CPU执行相关指令提供行为依据用来控制CPU的相关工作方式标志寄存器是按位存储数据的,8086有16位,标志寄存器也有16个位子存储标志。按索引不好记忆,一般给其起别名。ZF 标志ZF 标志代表着 Zero Flag,它记录相关指令执行后,其结果是否为0。如果为0,那么zf=1,否则zf=0。PF 标志PF 标志代表着 Parity Flag,它记录着相关指令执行后,其结果的所有bit位中1的个数是
2020-09-04 11:48:05 230
原创 王爽汇编学习(二)
栈 CPU可以把一段内存当做栈,提供了push和pop指令。push代表进栈,pop代表出栈。利用两个寄存器来指示栈的内存范围,ss寄存器存储着是段地址,sp寄存器存储着是栈顶地址,即偏移地址。 寄存器数量不够的时候,一般使用栈用来暂时存储数据。 一般栈顶是低地址,栈底是高地址,所以push的时候,sp存储的地址会减少,pop的时候,sp存储的地址会增加。可以把栈想象成一个桶,桶底是高地址,接触地面。往里面放东西,栈顶自然离桶底越来越远。 因为CPU并没有指定栈顶和栈底范围,就会出
2020-09-03 09:08:09 286
原创 面试题:计算两个字符串的和
前言 今天朋友给我发了一个面试题,让我想起了ACM的练习题,用C语言实现大数字的加法运算得出结果。这个面试题针对于java来计算两个字符串的和,不能转成int类型计算,也不能使用包装类计算。这两个字符串都只包含0到9的数字,并且都为正数。两个正整数相加的思路 首先考虑到需要一个变量存储结果,可以用字符数组存储相加后的结果。也考虑到有进位的情况,需要预留一位,以防止进位。两个正整数相加的实现根据题,实现的代码:private static String javaAdd1(String nu
2020-08-27 15:19:42 1285
原创 keytool创建二级证书
前言 上文介绍了如何创建https证书并使谷歌信任该证书(https://blog.csdn.net/q893332169/article/details/108081531),本文介绍,通过上文生成的根证书来制作二级证书。查看密钥库里面的内容keytool -list -keystore ./https_demo1.keystore -v生成证书keytool -genkeypair -alias secoundCert -keyalg RSA -validity 36500 -store
2020-08-25 10:38:20 490
原创 王爽汇编学习(一)
前言 最近在学习汇编,根据王爽的汇编语言进行学习,发现学习间隔了两天,前面的东西有点记不清了,写这篇文件进行复习下。基本 前面主要讲机器语言与汇编语言的关系,在计算机中指令和数据并没有多大区别,都是一堆二进制数据,CPU通过指令才操作外部设备,比如内存、硬盘、显卡等。内存和硬盘存储的最小单位是存储单元,一个存储单元存储8个二进制位,每8个二进制位组成了一个Byte。 CPU如果想进行数据的读取,就必须需要三个条件,一个是必须有可以传输地址的总线,另一个可以传输控制命令的总线,最后必须有个传
2020-08-24 17:58:38 199
原创 创建https证书并使谷歌信任该证书
前言 最近需要一个https证书进行客户端与服务端的通信,到网上搜了一下,使用java提供的keytool 做了一个证书,发现谷歌浏览器不信任证书,后来根据其他博客整理得出来正确做证书的方法,做完之后,在电脑上安装根证书,浏览器都会信任该证书,从而开始安全的进行通信。制作证书新生成一个密钥库keytool -genkeypair -alias https_demo1 -keyalg RSA -validity 36500 -storepass 111111 -keystore ./https_de
2020-08-18 16:49:57 1751
原创 InnoSetup打包自动签名
关于打包 我第一次接触打包,用的是inno Setup。软件自带文档,比较方便,而且我下载的是汉化版,更容易查询。刚开始用这个软件什么都不会,慢慢摸索,普通打包基本上没有问题了,后来因为打包的软件老是被360拦截,就算手动将所有dll文件进行签名,也无济于事。360拦截的是innoSetup生成的tmp临时文件,于是搜索怎么解决。网上没有什么信息,到文档上看,有一条提到了怎么进行签名。经过测试,总算找到适合我的方法,来进行双签名。下面是文档上原文:配置签名工具打开编译脚本,在菜单栏中选择工具,
2020-08-07 10:04:26 3183 8
原创 jfinal-多数据源连接
前言 JFinal,开发程序非常方便,尤其是控制台显示每次请求的具体信息,易读而且可以点击类名到对应的类中去修改。spring的日志真的密密麻麻,看的眼花。 此文演示如何用JFinal连接多个数据库,我尝试过连着mysql和oracle,没有问题。连接多个数据库,可以兼容以前的代码,以前连接的数据库当做主数据库,后面添加的数据库当做从数据库。 扩展:如何让JFinal使用sql文件,实现代码与sql分离。(多数据源演示)配置JFinal并运行起来 因为我本地没有JFinal项目,所
2020-08-06 14:54:33 1169
原创 毕业以来第一次总结
总得有个标题吧 想了想,自己已经毕业了两年了,还没有写过总结,是时候写个总结了。敲起键盘,被标题给难住了。没关系,到CSDN上的程序人生找找灵感。浏览一番,发现大部分不起标题,随便起个标题名称得了。接触编程的开始 我记得我第一次尝试接触编程的时候是高三,高三向同学买了本编程的书,好像是VB等语言系列的,我犹记得那本书记载着四种编程语言以及对应的光盘,但事实证明,并没有什么用。书看的我一脸模糊,不知从何下手。 后来报志愿,选了一个计算机专业,软件工程。现在还记得很清楚,上的第一节电脑课是教
2020-08-05 16:11:56 142
原创 我所遇见的坑(二)
起因前些天,查找一个ActiveX项目的问题。问题比较难定位,并且源码不怎么易读。表现:在绝大多数电脑上运行没有问题,但在个别电脑上100%会出现IE崩溃,并且在一些其他电脑上操作多次也会出现IE崩溃。经过多番调试,总算找到了原因。原来罪魁祸首是写文件日志 。stream != NULL首先先看这个报错图:再看一下项目的代码(已经经过略微修改):#include <afx.h>#include "stdafx.h"#include <iostream>#incl
2020-07-31 10:04:53 146
原创 我所遇见的坑(一)
前言编程多了,就会遇见坑。这些坑可能有自己的不小心,也有可能第三方工具的不小心。本篇记录自己所遇到的关于const的坑,事情起因源于我拷贝一个函数定义,父类函数没有const修饰,子类有const修饰,当我想new一个对象的时候,始终编译不过去。类似如下代码:class father{ virtual bool HasCapture() = 0; };class children{ virtual bool HasCapture() const { return true;} };
2020-07-31 10:02:11 148
原创 博客一键上传到阿里云OSS
起因 因为之前每次写文章都要登陆阿里云,手动上传文件比较繁琐,用提供的客户端老是需要重新输入密码,记住密码可能会弄丢,所以干脆用gulp写个上传的方法,命令一执行就可以实现一键生成压缩部署。安装依赖只需要安装ali-oss:npm install ali-oss --save-dev用到了node自带的fs模块开始实现上传文件遍历目录文件,将结果保存在fileList中。var fs = require('fs')var fileList = []function walk(
2020-07-31 09:57:05 249
原创 如何使用gulp压缩博客的html、css、image、js
安装gulp依赖首先安装gulp,执行以下命令:npm install gulp -g安装完之后,怎么实现压缩我们的博客资源呢?需要安装五个模块gulp-htmlclean //清理htmlgulp-htmlmin //压缩htmlgulp-minify-css //压缩cssgulp-uglify-es //压缩js, -es 代表可以处理es6语法gulp-imagemin
2020-07-31 09:51:15 250
原创 ATL调用ocx的方法(无界面调用ocx控件)
1. 前言首先添加AvtiveX中的MFC,选择ocx控件,vs会自动生成.h和.cpp的类,然后使用这个类创建对象,调用Create方法成功后,就可以调用ocx的方法了。2. 正题2.1 准备工作(1)首先准备一个ATL项目和一个ocx控件,注意本项目基于前文的ATL项目。 基于ATL搭建的ActiveX :https://blog.csdn.net/...
2020-03-31 09:34:33 772
原创 wxWidGets学习(自定义事件)
1. 前言废话不多说,先看效果图:从图中可以看出当点击第一个按钮的时候,第二个按钮的字会变。我写的是第一个按钮点击之后执行点击事件,在点击事件里面发送自定义的事件给第二个按钮,第二个按钮接受到自定义事件后,改变自己的label。2. 正文2.1 创建自定义事件类MyPlotEvent.h#ifndef MYPLOTEVENT_H#define MYPLOTEV...
2019-10-10 15:43:05 979
原创 wiWidgets 学习(动态事件)
1. 前言接上文,接着学习wiWidgets。上文地址:https://blog.csdn.net/q893332169/article/details/1023985492. 正文2.1 预览本文实验结果2.2 实现2.2.1 说明首先先准备两个button按钮,一个button按钮负责激活和取消绑定事件,一个按钮用来测试事件是否能执行。除此之外,还需要一个状态...
2019-10-09 16:10:03 128
原创 wxWidgets学习(过滤事件,通过继承改变默认事件表)
1. 前言最近需要学习wxWidgets,看了看书,还是比较通俗易懂的。本博客根据书籍《使用wxwidgets进行跨平台程序开发》第三章3.3 过滤某个事件的案例进行编写的。2. 正文2.1 创建项目暂时略过,网上有讲如何配置环境和创建项目的教程,本文不使用界面编辑器,全代码。2.2 生成一个新类MyTextCtrl,继承自wxTextCtrlMyTextCtrl 头文件...
2019-10-08 17:59:25 340
cn_pkcs_11v2.11
2020-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人