自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(385)
  • 收藏
  • 关注

原创 electron 开发

教程:https://www.electronjs.org/zh/docs/latest/tutorial/quick-start系统:Windows 10工具: PowerShell文件目录:index.html main.js package.json 和 preload.js 是手动添加的,其余是编译生成的index.html<!DOCTYPE html>&lt...

2024-03-29 18:59:00 197

原创 视频编码学习

1. H.264 和 H.265 区别参考:https://winddoing.github.io/post/4a8fdf27.html

2024-03-14 11:44:00 127

原创 git merge 问题

远端分支更新后,本地需要使用 git pull 或者 git fetch 获取更新有时候会出现拉取后,本地分支新出现一个 merge commit,这个 commit 会干扰到项目 commit 的历史线所以我们一般在 git fetch 或者 git pull 后再使用 git reset --hard xxxx 来同步上下游的 commit 历史线(xxx 的上游最新的 commit 的...

2024-03-05 16:01:00 313

原创 IDA 反汇编 explorer

之前写过一篇关于 IDA 在无 dmp 文件下如何定位到崩溃点的文章,由于其中涉及到公司项目,就仅限自己看了正好今天看到一篇关于火绒软件误杀 explorer 的文章,并且有相关的复现过程文章已经概述的很清楚,不过缺少软件的调试步骤,借此机会补充一下该调试过程一共使用两个软件,IDA 和 010 Editor,以及调试文件,explorer.exe 和 pdb 文件,这两个文件可以从上面链...

2024-02-23 12:21:00 311

原创 使用 Visual Studio 断点调试 DLL

继上文说到使用 IDA 和 WinDbg 调试无 dmp 文件那么在有源码的情况下可以直接断点调试 DLL,目的是查看 DLL 内部的函数调用场景:程序执行到某个 DLL 时突然崩溃,先确定 Debug 生成的 DLL 在程序中运行是否也会有闪退如果有,则适用于 VS 断点调试操作步骤:在 Debug 下生成一个对应的 DLL注意:必须是 Debug 生成的 DLL,不然没法断点...

2024-02-19 12:12:00 493

原创 Detours 的使用

Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库。 Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具。 拦截代码在运行时动态应用。Detours 将目标函数的前几个指令替换为无条件跳转到用户提供的 detour 函数它与WriteProcessMemory 有所不同区别:WritePro...

2024-02-19 11:15:00 329

原创 如何编写一个 PowerShell 脚本

PowerShell 脚本的后缀是 .ps1前提:ps1 脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层 api,方便快捷在编写 CMakeLists 时发现,项目不能够很好的使用 vcpkg tool chain,哪怕是在命令行中指定 vcpkg.cmake如果只是简单的项目,vcpkg tool chain 可以正常工作,但是在稍微复杂一些的项目中,比如依赖的 vcpkg ...

2024-01-16 18:33:00 492

原创 2023 年终小结

2023 结束了,写几句想说的话,也算是对这一年成长的小结1. 千里之行,始于足下,再难的任务也可以解析成很多小的需求,再逐个完成2. 保持积极向上的心态,遇事不着急,先分析再吸取他人的意见,最终给出中肯的解决方法3. 拥抱新的变化,要多读书多回顾,多记录学习到的知识,光靠脑子记不太行4. 尊重每一个人,你尊重他,他也会尊重你5. 家人的身体健康是最大的财富最后写些对自己的说的话,...

2024-01-02 15:34:00 366

原创 调试工具汇总

1.dependency walker用于查看 dll 之间的依赖关系2.EXE Explorer查看 exe 或者 dll 的 PE 信息可以查看时间戳,看编译时间是否正确3. hash.exe查看文件的 md5 是否一致可以用来检查文件是否完整4.clumsy 0.2clumsy 能在 Windows 平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况...

2023-12-25 12:02:00 404

原创 如何设置 vcpkg 依赖特定编译器

最近项目要部署到 gitlab-ci 上,所以远程机器上也要安装好编译环境在相关的环境安装完后,发现编译项目时提示找不到三方库的符号文件看到这个错误的第一反应就是依赖库的版本不对,因为远程机器上不仅安装了 vs2019,还安装了 vs2022这个可能会导致 vcpkg 编译时选择了 vs2022 的 MSVC,但是我们在 cmake 时选择的是 vs2019这样就导致了 jsoncpp...

2023-12-18 11:20:00 531

原创 C++ 快速加载 Dll 里的 API

最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在 Windows 上是 .exe为什么要程序加载器?个人理解是,可执行文件大小最好是越小越好,功能都可以由 dll 文件执行而程序加载器里最重要的是两个 win32 函数,分别是 LoadLibrary 和 GetProcAddress前者是加载 dll 并返回 instance 句柄,后者是从 instance 里提取所需的...

2023-12-14 11:46:00 397

原创 Windows 项目的 CMakeLists 编写

前言:项目一直是以 .sln 解决方案打开和处理的,上传到 github 也是需要将 sln 文件包括到项目里,不太优雅(虽然方便),毕竟现在开源项目基本都是使用 CMake 做跨平台编译因为项目是以 Windows 编译为主,就只写了 CMakeLists 中的 Windows 的部分,后续如果要跨平台的话,可以在此基础上拓展。写这篇文章的主要目的是积累和分享学习经验,在寻找相关 vs ...

2023-12-05 11:05:00 220

原创 windows 上 cmake 添加 vcpkg 选项

使用 cmake 编写相关的工程时,工程有时会使用 vcpkg 添加的第三方库,比如 zip 库查看一些案例后,我发现有些回答不太准确,遂记录下现在,我们需要在工程中使用zip_open 函数执行压缩命令,这个函数是 zip.h 里的,所以我们先要添加 zip 库打开 cmd,输入 vcpkg install libzip:x86-windows-static如果提示找不到 vcpk...

2023-11-30 17:43:00 174

原创 gitlab/github 设置 SSH

最近项目要部署到另一台机器上,故要重新 git clone 一下一开始只是简单的设置 config 里的 user.name 和 user.email,以为就可以 clone(邮箱账户拥有项目的权限)设置 config user.name 和 email 的方法git config --global user.name "Your Username"git config --glo...

2023-11-23 11:10:00 75

原创 dllimport 和 dllexport

Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如,#define DllExport __declspec( dllexport )class DllExport C { int i; virtual int func( void ) { return 1; }};注意,禁止对可导出类的成员显式使用dllimport和dllexport...

2023-11-08 16:14:00 79

原创 vcpkg manifest 的使用

最近项目上要使用 CMakeLists 管理,由于 Windows 版本有依赖到 vcpkg 提供的库,所以需要使用 vcpkg manifest 来统一设置库的版本,方便后续维护推荐一个文章,介绍的可以说是非常全面了VCPKG 特性 - Versioning不过里面也有一些过时的特性,我在后面会补充一下为了防止上面文章的链接失效,故列出一些常用的命令这是一个完整的 vcpkg.j...

2023-10-13 19:38:00 176 1

原创 windows 上 ffmpeg 库的安装

真复杂啊安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点困难了下面记录下我遇到的坑,借助这篇文章,我打算使用 vcpkg 切换到 ffmpeg 的历史提交并安装1. cmd 下切换到 vcpkg.exe 的安装目录下,确保该目录下有 .git 文件...

2023-09-19 15:46:00 252

原创 MinGW 和 MSVC

在 Winodws 上编译通常会用到这两种工具链MinGW(Minimalist GNU for Windows) 通常用于跨平台开发,可以编译出在 Windows 系统上运行的 .exe 程序MSVC(Microsoft Visual C++) 是专属于 Windows 软件开发,不能跨平台它们有以下区别:编译器:MinGW 使用GNU编译器集合(GCC)的变体,它是一个开源的...

2023-09-15 14:53:00 1358

原创 使用 MSYS2 编译 exe 可执行程序

MSYS2 是一个在 Windows上 运行的软件环境,它提供了一种在 Windows 上使用 GNU 工具链的方式,包括 GCC 编译器和 GNU Make 构建系统。在 MSYS2 中,你可以使用静态库(.a 文件)来编译和链接 Windows 版本的软件,但是需要确保一些事项:正确的工具链:确保你使用的是适用于 Windows 的工具链,而不是针对 Linux 或其他操作系统的工具...

2023-09-14 14:56:00 286

原创 uint32_t 至 int64_t 转换

而 -1 在 uint32_t 中并不会保持为负值,它只能表示非负的整数值,所以 -1 会被解释为一个很大的正整数,具体取决于该类型的最大值(UINT32_MAX)int64_t 的取值范围是 -9223372036854775808 到 9223372036854775807,所以放下 UINT32_MAX 没有压力。在 uin32_t 中,-1 被表示为该类型的最大值减去它的绝对值再加 1,即 4294967295 - 1 + 1,结果为 4294967295。主要问题在这行代码上,

2023-08-31 18:25:48 899

原创 将博客搬至CSDN

鉴于博客园目前存在的危机,保险起见,将自己的文章搬到 CSDN 上CSDN:https://blog.csdn.net/qq_39529180博客园:https://www.cnblogs.com/strive-sun/

2023-08-16 17:50:00 28

原创 ubuntu 23.04 无法联网

一些参考文章:解决ubuntu突然无法联网问题共享主机网络方法:https://www.server-world.info/en/note?os=Ubuntu_22.04&p=squid&f=2如何在 windows 和 ubuntu 直接拖动文件?Vmware虚拟机和宿主之间的复制文件设置虚拟机共享主机VPN连接更新:上面方法对我来说全部没...

2023-08-15 15:55:00 59

原创 关于 try... catch

在逛论坛看见一个有意思的帖子,有点意思,记录下关于"异常捕捉"(try catch)是否存在悖论?一些我觉得有用的回复,放到下面了,1. 当某些错误状况难以完全避免时,try-catch 可以用来控制错误扩散范围,防止整个程序崩溃。比如外部系统异常、网络中断等不可控因素。2. 对于业务逻辑复杂的情况,想要全面预测并避免所有错误是很困难的。try-catch 可以用来处理意料之外的异...

2023-08-11 15:31:00 32

原创 Google C++ 风格指南记录

最近在看谷歌的 C++ 风格指南发现了一些有意思的知识点,遂记录下1. 第六章第二小节介绍了右值引用只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用std::forward.定义:右值引用是一种只能绑定到临时对象的引用的一种, 其语法与传统的引用语法相似. 例如,voidf(string&&s); 声明了一个其参数是一个字符串的右值引用的函数.优...

2023-08-10 17:16:00 54

原创 std::shared_ptr 线程安全方面的思考

一直惦记着 std::shared_ptr 线程安全的问题,看了些文章后,又怕过段时间忘记了,遂记录下来std::shared_ptr 的线程安全问题主要有以下两种:引用计数的加减操作是否线程安全std::shared_ptr 修改指向时是否线程安全第一个问题的答案: 是线程安全的,因为是原子操作注意:引用计数这一变量的存储,是在堆上的,多个 std::shared_ptr 的对...

2023-08-04 18:41:00 175

原创 std::queue 中遇到释放内存错误的问题

项目上有个需求要用到 std::queue 顺序处理消息事件简单的示例如下:struct MyEvent { MyEvent() { event_ = CreateEvent(nullptr, 0, 0, 0); } ~MyEvent() { std::cout << "MyEvent deconstruct" << std::endl; } voi...

2023-07-28 12:02:00 136

原创 std::ofstream 写本地音频

最近线上 PK 偶然出现双方主播互相听不见声音的情况,在日志不能明确体现问题时,就需要抓下主播本地的音频和远端的音频来确定数据是在哪消失的所以我们用到一个比较简单的流写出的标准库类:std::ofstream通过 std::ofstream类,可以创建一个用于写入文件的输出流对象,可以将数据写入到文件中下面是一个简单的例子:#include <fstream>// 音...

2023-07-21 16:39:00 35

原创 C++ 虚基类

虚基类(Virtual Base Class)在面向对象编程中的作用是解决多重继承中的菱形继承问题(Diamond Inheritance Problem)和共享基类问题(Shared Base Class Problem)。菱形继承问题是指当一个类以多种路径继承自同一个基类时,会导致该基类在派生类中存在多个实例,造成冗余和二义性。虚基类通过在派生类中使用虚继承来解决菱形继承问题。虚基类允许在...

2023-07-19 11:02:00 161

原创 git 添加子模块

参考:https://www.jianshu.com/p/10ae453701ed问题:如果一个子模块的分支不是最新的该怎么处理?方法:在主仓库内使用 cd 命令切换到子模块的仓库,使用 git pull 拉取最新提交,如果想切换到其他分支,可以使用 checkout 调整拉取完之后,再切回到主仓库里,使用 git commit 提交修改后 push 即可...

2023-07-14 10:35:00 22

原创 不要用基指针删除派生对象数组

看陈皓的博客后,发现这一点,以前都没注意过,也是因为没这样用过陈皓叔 R.I.P...见下面代码:#include <iostream>class Base { int b; public: virtual ~Base() { std::cout << "B::~B()" << std::endl; }};class Derive...

2023-06-21 16:23:00 24

原创 C++ std::move 的一些问题

看 SO 上有一个比较奇怪的问题,When does an rvalue reference result in a move vs copy constructor and why?问题代码:ClassX c = std::move(object_c); // Invokes move constructorClassX&& cr = std::move(ob...

2023-06-20 11:42:00 36

原创 关于函数指针的一些问题小结

最近接到一个需求,使用 sdk 提供的消息回调,一般我们是继承 sdk 的消息类,然后 sdk 的消息回调(虚函数)会在有消息的时候调用回调指针,从而触发回调不过因为 sdk 那边又对该消息类二次封装了并提供了一些接口,所以在研究二次封装的方法时,遇到了一些有意思的问题,故记录下typedef void(__stdcall* fSDKLogCallback)(void* ctx, int3...

2023-06-14 18:45:00 41

原创 Linux Ubuntu 遇到的一些问题

Ubuntu 国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/#1. 安装一些常用的软件时,需要下载 amd.deb 类型的包,并使用下面命令安装sudo dpkg -i xxx.deb2. 如果是用英文安装的 Ubuntu,则需要在设置中添加中文添加完需要 logout 再 login在【键盘】选项中切换输入源都完成后,就可以 【wi...

2023-05-30 17:34:00 34

原创 编译静态库遇到的 LNK2019 报错

前文提到了 CMake 学习文末基本涵盖了我遇到的编译问题,但是在得到一个编译好的 .lib 文件后,还需要放到项目中引用成功后才算真正的完成静态库的编译嗯,我之所以说这些是因为我在项目中链接静态库时出现了 LNK2019 经典错误错误如下:Libraryd.lib(at_exit.obj) : error LNK2019: unresolved external symbol "vo...

2023-05-25 19:09:00 185

原创 CMake 学习

最近有一个多个 .h .cc .cpp 编译成静态库的需求,故记录下过程静态库不同于动态库,它不需要 main 入口,只要各个源文件与头文件能对应,也就是源文件和头文件引用的头文件能够找到函数的符号文件,即可编译成功新手教程参考:CMake 中文版CMake 英文版因为只需要用到部分源文件,故单独列出,我的 CMakeLists 写法:cmake_minimum_require...

2023-05-24 11:26:00 27

原创 New Questions

1. C++/Qt 实现一个信号槽#include <functional>#include <iostream>#include <vector>class Signal { public: using SlotFunction = std::function<void()>; void connect(const Slo...

2023-05-16 11:45:00 18

原创 Qt 加载 libjpeg 库出现“长跳转已经运行”错误

继上篇Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误篇幅有点长,先说解决方法,在编译静态库时加上 -qt-libjpeg,编译出 libjpeg 库后,在项目中使用 #pragma comment 链接即可OK,开始回顾痛苦经历在我以为升级到 Qt5.15.9 后,运行没有什么问题时,问题就来了在加载 jpeg 格式的图片时,出现了“长跳转已经运行”的错误这个错误一般...

2023-04-21 17:53:00 30

原创 Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误

按照之前我写的文章教程,可以很简单的编译出静态库(仅供学习交流)编译 windows 上的 qt 静态库编译出静态库后,替换旧版本的库,见我另一篇文章教程VS2019 配置 QT 库之所以没有直接上 Qt6.0 以上的版本,是因为 Qt6.0 对比 Qt5 删减了不少东西(我之前已经测试过了),这就导致项目要有比较大的改动,所以暂时没有特别要换的需求Qt5.15.9 的静态库版...

2023-04-17 15:12:00 111

原创 递归相关题

遵循四个原则,1) 程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)2) 函数的局部变量是独立的,不会相互影响3) 递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:)4) 当一个函数执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁。斐波那契数列请使用递归的方式,求出斐波那契数 1,1,2,3,5,8,13... 给你一个整数 n,求出它的...

2023-03-31 17:33:00 14

原创 WriteFile 奇怪的现象

项目中有个需求是要对文本内容检索并重写,我们使用的是 WriteFile 覆盖旧的文本内容最小示例:#include <Windows.h>#include <iostream>int main() { HANDLE hFile = CreateFile(L"File.txt", // Open File.txt. ...

2023-03-14 14:44:00 65

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除