杂七杂八
LyRics1996
人生天地间,忽如远行客
展开
-
C++/MFC 面试题(三、C++11与STL)
一、STL标准模板库(Standard Template Library)包含了很多实用的组件,利用这些组件,程序员编程更加方便高效1.1 STL的基本组成部分是什么?容器、迭代器、算法是STL的三个基本组成部分容器:是对象的集合,举例:vector、list、stack、queue、set、map、deque迭代器:面向对象版本的指针,STL算法通过迭代器在容器上进行操作算法:对容器进程处理的函数,如:for_each、copy、sort、merge、search1.2 vector容器与原创 2021-09-23 21:46:51 · 813 阅读 · 0 评论 -
创建非模态对话框,程序崩溃
通常来说,创建一个非模态对话框非常简单,只需要三行。 CTestDlg *pDlg = new CTestDlg; pDlg->Create(IDD_DIALOG1, this); pDlg->ShowWindow(SW_SHOW);但是在某些情况下,程序直接崩溃打断点观察的现象是到第三行显示的时候崩溃。在仔细看每一行的代码,我们可以看到创建时pDlg指针虽然不为null,但是它的m_hWnd指针却为空,这是为什么呢?简单的来说,很明显在创建时 就已经失败了,只是程序并没有立即原创 2021-09-08 21:42:11 · 739 阅读 · 0 评论 -
用C++写一个自己的QQ(九、界面交互)
一、登录界面就一个登录按钮:二、客户端界面2.1 显示账户信息这个代码逻辑同服务端一样看懂服务端的,就知道这里该怎么写了,一模一样,所以不赘述了2.2 打开聊天窗口双击用户,打开聊天窗口三、聊天界面3.1 初始化初始化时,加载对方信息和我的信息3.2 发送消息点击发送按钮:3.3 接收消息开个定时器,定时刷新即可四、运行最后再来看一遍运行效果启动服务器打开客户端,输入id密码,登录登录多个用户,这里我没有做实时的刷新,所以有些已经登录上了还是灰色状态原创 2021-09-08 11:56:12 · 1154 阅读 · 0 评论 -
用C++写一个自己的QQ(八、TCP通信客户端)
一、通信格式通信格式在之前,就已经定好了,采用JSON主要有两个类:1.1 JsonCtrl这个类主要用来拼接和解析Json格式的字符串1.2 MessageCtrl这个类主要用来收发消息后的相关处理二、TCP通信这里很明显要用客户单了,当然我们还是采用HPSocket,不再详细赘述.cpp文件#include "TCPClient.h"#include <string>using namespace std;TCPClient::TCPClient() :m_C原创 2021-09-08 11:44:44 · 776 阅读 · 0 评论 -
用C++写一个自己的QQ(二、使用MySQL读写数据)
一、新建数据库新建一张tb_account表,用来存放账户信息新建一张tb_department表,用来存放部门信息二、项目配置新建include,lib文件夹include下放入mysql的头文件lib下放入mysql的库路径包涵附加依赖项三、封装类一个简单的单例模式封装.cpp文件#include "pch.h"#include "MysqlUtil.h"MysqlUtil* MysqlUtil::m_Instance = nullptr;MysqlUti原创 2021-09-08 10:37:16 · 431 阅读 · 0 评论 -
用C++写一个自己的QQ(一、服务端界面设计)
一、新建工程VS版本:VS2019二、主界面主界面主要有三个功能:启动服务器,等待客户端连接部门设置,新增删除查看部门账户设置,新增账户查看账户三、部门设置用一个tree控件显示部门信息,并且鼠标左键点击,右侧显示该部门的详细信息。四、账户设置使用一个tree控件显示账户信息,鼠标点击可显示选择账户的详细信息可增加账户,设置主管,可删除账户。...原创 2021-09-08 10:26:27 · 924 阅读 · 2 评论 -
C++写一个内存清理软件(五、进程管理)
一、界面1.1 界面绘制一个tab、一个list1.2 初始化1.3 重绘二、菜单2.1 新建菜单资源视图中新加入菜单2.2 刷新与结束进程添加事件处理程序2.3 显示进程双击添加事件后,加入下面程序void CDlgTask::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult){ // TODO: 在此添加控件通知处理程序代码 ShowList(m_tab.GetCurSel()); // 设置列表原创 2021-09-03 11:03:26 · 490 阅读 · 2 评论 -
C++写一个内存清理软件(四、垃圾清理)
一、创建垃圾文件选择界面二、初始化垃圾文件选择check状态类向导添加此函数后,加入下面代码:三、重绘垃圾文件格式选择界面将界面背景变为黑色四、新建垃圾文件清理界面五、清理5.1 初始化驱动器5.2 选项垃圾文件读取5.3 开始与结束清理5.4 文件删除void CDlgLoser::FileDelete(CString FilePath){ CString num, str, Name, FileName; CFileFind file; if (FilePa原创 2021-09-03 10:02:44 · 1251 阅读 · 2 评论 -
C++写一个内存清理软件(三、内存清理)
一、界面添加static、check、list、button二、重绘重绘控件,改变控件颜色右键类向导,生成函数后加入以下代码三、初始化右键类向导,在生成函数中加入以下代码四、交互双击清理按钮,加入以下代码五、清理void CDlgDisk::ClearDisk(int num){ LPINTERNET_CACHE_ENTRY_INFO pEntry = NULL; HANDLE hDir = NULL; HANDLE hTemp = NULL; unsigned l原创 2021-09-03 07:54:26 · 1045 阅读 · 0 评论 -
C++写一个内存清理软件(二、控制面板操作)
一、新增界面新增dlg界面,并修改下图的属性添加12个按钮,修改名称,以及自绘属性(此属性不修改,则重绘代码无效)二、添加资源将图标资源放入res文件夹内后,在资源视图中进行添加三、交互依次双击十二个按钮,在生成的函数中加入以下代码void CDlgControl::OnBnClickedBtnInternet(){ // 打开 IE 的设置窗口 ::ShellExecute(NULL, "OPEN", "rundll32.exe", "shell32.dll Contr原创 2021-09-03 06:28:16 · 525 阅读 · 0 评论 -
C++写一个内存清理软件(一、界面设计)
一、新建工程选择MFC,创建新项目,修改工程名,选择基于对话框,创建。二、 自绘title2.1 修改属性2.2 加载位图2.3 定义title需要的变量和相关方法void CCleanMasterDlg::DrawCaption(){ // 标题文本不为空 if (!m_caption.IsEmpty()) { CDC* pDC = GetWindowDC(); // 获得窗口设备上下文 pDC->SetBkMode(TRANSPA原创 2021-09-02 23:27:51 · 555 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(六、dll注入)
一、说明DLL注入技术可以被正常软件用来添加/扩展其他程序,调试或逆向工程的功能性;该技术也常被恶意软件以多种方式利用。这意味着从安全角度来说,了解DLL注入的工作原理是十分必要的。注入攻击相关例子二、新建DLL程序三、增加代码增加钩子函数响应键盘函数四、配置打开Def文件增加新增的函数名称五、调用在界面中双击dll注入,在生成的函数中加入以下代码,运行点击dll注入按钮,即可加载dll程序...原创 2021-09-02 18:53:29 · 491 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(五、界面交互)
一、说明前面几篇,已经将所有基本的工具函数写完,这一篇,主要是将所有的功能串起来,使界面和功能进行交互。二、初始化2.1 初始化两个listctrl查找的list控件只需要一栏,显示地址就可以了目标list控件需要四栏,分别为说明、地址、类型、值,其中说明可以不考虑将这两个函数在OnInitDialog中调用2.2 初始化搜索和编辑设置将这两个函数在OnInitDialog中调用2.3 回调函数三、搜索3.1 首次搜索双击首次搜索按钮,在生成的函数中加入以下代码:逻辑原创 2021-08-28 17:11:59 · 980 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(四、回调函数)
一、说明上一节,我们简单的提了一下,为了得知搜索的进度,我们采用了回调函数的方式来实现进度条,当然你也可以开个线程或者定时器来实现,但是这一篇,我们主要来谈一谈回调函数二、一个简单的回调函数#include <stdio.h> typedef void(*lpFunc)(void *, char *); // 函数指针 // 回调函数的宿主函数,在这里回调用函数被使用, void GetCallBack(void * lpVoid, lpFunc callback) {原创 2021-08-28 16:42:16 · 692 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(三、内存操作)
一、说明本章来介绍一下内存的操作,这个程序参数修改器的其中的一个原理就是读写内存的值,分四步:从选择的进程的内存中读取我们需要的值通过官方软件(例如扫雷程序)改变其值再次从选择的进程的内存中取修改过的值直到没有无法缩小范围,调用api修改内存关键函数两个:ReadProcessMemory 读取内存WriteProcessMemory 写入内存(需要关闭360等安全软件)二、新建Search类该类主要有两个功能:搜索 (分为首次搜索和再次搜索,其中再次搜索是在首次搜索的地原创 2021-08-28 12:41:24 · 943 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(二、进程操作)
一、添加进程操作类右键、添加类添加变量二、获取所有32位进程2.1 获取所有进程创建进程快照判断第一个进程遍历剩余进程2.2 判断是否为32位进程2.3 判断是否为32位操作系统2.4 获取路径与图标三、加载3.1 打开进程列表界面双击主界面中的进程列表,在生成代码中打开进程列表界面:3.2 类向导添加OnInitDialog函数右键类向导,添加OnInitDialog函数,加入以下代码3.3 双击获取选择进程右键添加时间处理程序,选择双击,原创 2021-08-27 22:05:11 · 746 阅读 · 0 评论 -
C++ + MFC 写一个程序参数修改器(一、界面设计)
一、说明本程序仅为参考二、新建工程三、绘制界面删除多余的东西控件四、资源视图原创 2021-08-27 20:45:14 · 350 阅读 · 0 评论 -
Qt 中文路径导致构建失败等问题
一、描述拥有中文路径会导致程序构建失败等一系列问题,那么该如何解决此问题?二、方案2.1 由于中文路径导致构建失败关闭程序,修改当前的路径,将中午替换掉2.2 无法进入断点debug模式才能进入断点之前有中文路径解决方案一:关闭程序,删掉user文件,重启解决方案二:打开项目,修改路径即可...原创 2021-08-23 23:52:27 · 1229 阅读 · 0 评论 -
Qt 中定时器该怎么使用
一、说明QT中有两种使用定时器的方法object类自带的定时器Qtimer定时器类接下来,我们来说明一下该如何使用二、QObject中的定时器的使用三个函数,了解一下:virtual void timerEvent( QTimerEvent *event);在需要使用的类的头文件中,加入上述函数这个函数内部实现定时器时间到了之后,需要处理的事情定时单位级别 毫秒event->timerId()获取进入此处理函数的id号int QObject::startTimer ( i原创 2021-08-23 23:46:36 · 656 阅读 · 0 评论 -
MFC中如何修改BUTTON按钮颜色
新建一个类继承CButton.h文件#pragma once#include <afxwin.h>class COwerButton : public CButton{ DECLARE_DYNAMIC(COwerButton) public: COwerButton(); virtual ~COwerButton(); void SetButtonBgColor(COLORREF color); void SetButtonTextColor(COLORR原创 2021-08-22 21:35:30 · 2373 阅读 · 1 评论 -
FTP的简单使用(一、利用FTPlib写一个客户端)
一、什么是FTPFTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。二、FTP能做什么FTP的主要作用,就是让用户连接上一个远程计算机(这些计原创 2021-06-13 22:06:25 · 1571 阅读 · 0 评论 -
C++ Excel表格解析(一、MFC工程中的应用)
一、前言C++怎么解析Excel呢,这两天研究了一下,这一篇就来谈一谈MFC中如何解析Excel。二、准备2.1 代码结构2.2 类说明2.2.1 类型库 图中圈出来的这些类,都是一些自带的类,两种方式, 方式一:你直接复制其他工程的即可 方式二:添加新项->添加类->选择这几个类即可。(VS2019不支持)(2.3.2有介绍)2.2.2 主界面类2.2.3 加载图片界面类2.2.4 MFC生成的启动类2.3 新建工程2.3.1 新建项目(两个关键步骤)原创 2021-02-03 19:42:46 · 2011 阅读 · 1 评论 -
C++ 解析XML(二、pugixml)
一、前言在一里面的用的CMarkUp,不太好用,每次查找需要一层层的去找,就很麻烦。然而除了使用CMarkUp以外以及自己写以外,网上还有很多比较好的库以及第三方的代码。pugixml就是其中一个轻量级的且支持xpath的xml解析方案。二、下载下载地址:https://pugixml.org/...原创 2021-02-02 19:16:27 · 773 阅读 · 0 评论 -
C++解析XML文件(一、 CMarkUp的使用)
一、前言XML文件经常会被当做配置文件来使用,所以如何解析XML文件,也是一个必备skill。本文介绍如何用CMarkUp来解析XML文件,CMarkUp是一个不需要编译成动态库可以直接用的类。二、函数介绍2.1 bool CMarkup::Load( MCD_CSTR_FILENAME szFileName ) 加载xml文件,szFileName为文件名2.2 bool CMarkup::FindElem( MCD_CSTR szName ) 查找名为szName的元素或者节点2.3原创 2021-02-01 19:47:41 · 1785 阅读 · 0 评论 -
C++ VS中Event事件用来做超时使用
一、前言以前我写超时,一般都是调用GetTickCount()函数来做,后来发现VS中有一个event的操作可以直接用来做超时,所以简单的研究了一下二、代码2.1 main#include "Event.h"#include <thread>void Test(){ cout << "Test" << endl; Sleep(3000); // 时间1 cout << "complete event!" << endl;原创 2021-02-01 19:23:47 · 490 阅读 · 0 评论 -
C++ log4CPlus报LNK2001
一、前言如图所示,报错:LNK2001 无法解析的外部符号 "void __cdecl log4cplus::detail::macro_forced_log二、解决如图所示:编译log4cplus时 将使用多字节改为使用Unicode格式!然后用生成的库替换原来的库...原创 2020-11-25 10:02:19 · 370 阅读 · 0 评论 -
C4996 ‘inet_addr‘: Use inet_pton() or InetPton() instead or define _WINS
一、前言原代码是使用VS2013编写,升级为VS2019,会报如下错误:二、代码 struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(8888); //设置端口号, sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.42"); //设置地址第四行报错!三、解决方法一:点开项目属性页,C/C++ -> 常规 -> SDL 检查改为否即可;原创 2020-11-25 09:42:57 · 434 阅读 · 0 评论 -
VS2013 未找到与约束ContractName
一、突然界面框架什么的就不能用了,搜索到的解决方法是,点击这个如图所示这个玩意,修复一下就行,但是很明显win10点不了二、那么在启动菜单搜索控制面板,如下图所示,打开控制面板三、打开老版的界面,点击图中的程序,如下图所示:四、点击程序和功能五、点击图中的程序,右键修复即可...原创 2020-11-24 20:01:51 · 358 阅读 · 0 评论 -
C++ VS单例模式报 错误 LNK2001 无法解析的外部符号 private: static class SingletonPattern错误
一、前言如图所示,C++使用VS写完单例模式后,报如下错误:错误 LNK2001 无法解析的外部符号 “private: static class SingletonPattern * SingletonPattern::m_Instance” (?m_Instance@SingletonPattern@@0PAV1@A) Test 错误 LNK1120 1 个无法解析的外部命令 二、代码2.1 SingletonPattern.h#pragma once#include <ios原创 2020-11-24 19:42:44 · 2508 阅读 · 2 评论 -
error LNK2005: “void __cdecl operator delete(void *)“ (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(delete_scalar.o
如题:error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(delete_scalar.obj) 中定义fatal error LNK1169: 找到一个或多个多重定义的符号我只是定义了一个类,还是自动生成的,连类里面的内容都没有写,就报了一个2005,一个1169,如图所示。查看了网上的资料,发现大多提到的原因都是 重定义了某些函数或者变量,让我直接就懵逼了,我只是写了原创 2020-10-20 23:35:05 · 763 阅读 · 0 评论 -
WIN10使用右键从属性里复制的路径无效
这个问题我在使用VS2017写C++代码,Eclipse写java代码时都它苗遇到过。巨坑简直!!!!!!!!右键->属性->安全->然后选择图中这个的路径。有报这个的System.NotSupportedException:“不支持给定路径的格式。”也有直接就是路径无效,找不到路径,反正就是程序异常!!!然后,我照着这个路径手敲一遍就好了,当时怎么看都看不出来哪里的问题!后来发现是那台电脑复制路径后,前面的会多一个字符!!!这个字符你用记事本还看不到,使用Notepad原创 2020-08-10 23:02:11 · 2375 阅读 · 0 评论 -
笔记本更换网络连接,MAC地址改变!
如题:之前搞得一个的软件是需要绑定用户的MAC地址,为了安全起见,这样做的软件并不在少数。一般来说,用户的mac地址是不会变的,但是问题就来了,有的人在使用时,表示自己只要切换个网络,从2.4G的WiFi切换到5G的,mac地址就改变了!!当时据他喵的震惊,最近又查了查资料,发现这个问题应该是win10系统里面的的配置选项打开了!网络和internet设置->WLAN->随机硬件地址如图所示,这个选项打开后,链接新网络,就会出现一个新的MAC地址,而且是随机的!...原创 2020-08-16 00:02:28 · 6888 阅读 · 0 评论