
C++
文章平均质量分 68
C++是C语言的超集,是一门经久不衰的语言,语法灵活,能非常方便与其它语言对接,是开发基础库的不二之选。
插件开发
熟练开发PS插件、AI插件、AE插件、CDR插件、3DMax插件和其它各类插件。
展开
-
VS2022-编译 Boost 库的完整指南-测试库并使用
在 VS2022 中编译和使用 Boost 库的关键步骤包括:下载源码、生成构建工具、选择合适的编译参数、配置项目属性。根据项目需求,可以选择完整编译或只编译特定组件。正确设置包含目录和库目录是成功使用的关键。对于简单项目,也可以考虑使用 NuGet 安装预编译版本。原创 2025-03-31 15:06:35 · 1175 阅读 · 0 评论 -
vs2019编译libcurl,添加openssl和zlib支持
作者原文有详细步骤。原创 2025-01-10 08:11:09 · 197 阅读 · 0 评论 -
如何用VS调试不属于解决方案的EXE和DLL程序-使用PDB和EXE文件-根据exe|pdb|源码文件进行调试分析
可以新建一个空文件夹,比如VS_DEBUG\curlSrc, 项目名称比如说curlSrc, 然后将文件从这些文件夹添加到项目中,确保所有你写的CPP和H文件都在这个目录(这些源代码文件只是会被引入项目, 但不会拷贝到VS_DEBUG\curlSrc目录下, 也就意味着你仍然可以随时修改代码并用NMAKE构建而不必担心代码在VS中更新的问题)。如果你手里有一个现成的EXE, 以及EXE相关联PDB文件, 还有相关联的CPP文件和H文件. 你如何用VS调试?把PDB文件的路径添加进去并打勾即可。原创 2025-01-09 21:34:26 · 704 阅读 · 0 评论 -
OpenCV加速方法-像素遍历-内存释放-运行时间计算-基本技巧
一般图像行与行之间往往存储是不连续的,但是有些图像可以是连续的,Mat提供了一个检测图像是否连续的函数isContinuous()。使用LUT可以有效地对图像进行像素值的转换,常用于颜色空间转换或者对特定像素值进行操作。因此只需要使用 UMat来替换Mat,而其余的代码保持不变,即可实现加速。查表法可以很大程度的节约计算时间,优于每个像素点的重复计算,如果像素点的计算,不与周围像素相关,应采用这种方法进行计算。使用指针方式是最快的处理方式,而迭代器的方式相对最慢。但是使用迭代器是较为安全的访问方式。原创 2024-10-21 15:37:42 · 871 阅读 · 0 评论 -
python-C接口-C语言调用python函数-简单范例
它还初始化模块搜索路径 (sys.path)。此函数有两个参数,而且都是Python对象指针,其中pfunc是要调用的Python 函数,一般说来可以使用PyObject_GetAttrString()获得,pargs是函数的参数列表,通常是使用Py_BuildValue()来构建。在调用 Py_FinalizeEx() 之后,这将返回 false,直到再次调用 Py_Initialize()。返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句,o.attr_name。原创 2024-08-26 08:18:39 · 586 阅读 · 0 评论 -
c++-msys2程序工作原理?
综上所述,MSYS2 能够在 Windows 上运行“类 Linux 程序”的原理在于它既提供了模拟 POSIX 环境的组件,又结合了编译生成原生 Windows 可执行文件的能力。通过这样的方式,开发者可以在 Windows 上获得类似 Unix/Linux 的开发体验,并且能够构建适用于 Windows 平台的应用程序。MSYS2 是一个为 Windows 用户设计的 Unix-like 开发环境和命令行接口,它允许用户在 Windows 上编译和运行许多原本为类 Unix 系统设计的软件。原创 2024-04-21 15:29:03 · 560 阅读 · 0 评论 -
PIMPL-C++-设计模式-私有化对象-类成员变量初始化-类的私有成员-Q_FOREACH
是Qt库中的宏定义,主要在C++中用于标记符号(如类的成员函数或变量)为“隐藏”,在Windows和其他一些平台上,它会使得这些符号在生成的DLL或库中不可见,仅对当前编译单元可见,有助于隐藏实现细节,防止API污染,同时也能够避免因ABI(应用程序二进制接口)变动导致的问题。这样,当实现类的细节发生变化时,只要接口(即原始类)不变,就不会影响到直接使用这个类的客户端代码,从而避免了大规模的重新编译,提升了编译效率。,所以如果你使用的是C++11或更新的标准版本,这个初始化方式也是完全有效的。原创 2024-04-20 14:58:17 · 1100 阅读 · 0 评论 -
CMake语法-include(FeatureSummary)-可选特性和组件-configure_file-配置文件-#cmakedefine
include(FeatureSummary) 是引入CMake的一个模块,该模块允许开发者追踪项目的可选特性和组件,并在配置时输出一个简洁的特性概览。原创 2024-03-29 09:14:44 · 805 阅读 · 0 评论 -
Win32-C++-虚拟键码-扫描码-GetAsyncKeyState-MapVirtualKey-键盘编码
GetAsyncKeyState获取的是按键的实时状态,而GetKeyState获取的是最近一个消息从线程的虚拟输入队列取走时该按键的状态,简单来说,就是窗口的消息循环在调用下一个GetMessage或PeekMessage前,使用该函数对特定按键的查询都返回的是同一个值,不管在调用下一个GetMessage或PeekMessage前用户是否按下了该键。虚拟键码与具体的键盘硬件无关,同一功能的键在任何兼容的键盘上,其虚拟键码都是固定的。:是键盘硬件层面产生的原始编码,它直接对应于键盘上每一个物理按键。原创 2024-03-29 09:13:44 · 1955 阅读 · 0 评论 -
ubuntu22.04-调试程序-VSCode-CMake构建项目-常用目录-C++
Krita 是一款专业的数字绘画软件,而这里显然是一个开发者为调试其源代码编写的调试配置。:调试的目标可执行文件路径,开发者需要根据实际情况修改为Krita的实际安装或构建生成的可执行文件位置。项目的CMake配置,包括了源代码组织结构、库的类型(共享库)、源文件列表及库的输出路径等关键设置。在CMake中,有几个关键的目录变量用于定位项目源代码和构建输出的位置。:表示调试会以启动模式运行,即VSCode将启动指定的程序进行调试。:定义了这个调试配置的名称,在VSCode调试面板中显示。原创 2024-02-29 09:11:15 · 772 阅读 · 0 评论 -
ubuntu22.04-cmake-添加动态库-静态库-添加头文件夹所在位置-管理员启动
该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add_executive ()或 add_library ()之类的命令创建的,并且不能是 ALIAS 目标。命名的必须是由add_executable()或add_library()之类的命令创建的,并且不能是ALIAS目标。目标依赖项的使用要求会影响其自身源的编译。PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。原创 2024-02-18 08:26:48 · 532 阅读 · 0 评论 -
ubuntu22.04-编译安装Qt5.15.3-C++
如果您是在2024年执行此操作,请务必检查Qt 5.15源代码与当前Ubuntu 22.04系统组件的兼容性,以及是否有新的已知问题需要解决。如果有可能,建议升级到更高版本的Qt,或者寻找社区维护的适用于Ubuntu 22.04的Qt 5.15 PPA。在Ubuntu 22.04 LTS(Jammy Jellyfish)环境下编译Qt 5.15,由于Ubuntu 22.04的官方仓库不再提供Qt 5.15系列的支持,您需要从源代码编译。访问Qt官网的Archive部分下载Qt 5.15的源代码包,例如。原创 2024-02-07 08:10:56 · 2850 阅读 · 0 评论 -
QTabletEvent-Qt-如何使用数字手写板,并捕获相关事件?
是处理来自图形平板设备输入的事件类。当用户使用数位板(如Wacom等品牌)与应用程序交互时,这些事件会被发送到相应的QWidget或其子类上。如果你想要在QWidget中捕获并响应来自数位板的输入,例如压力、倾斜角度、旋转信息或者精确笔触,你需要重载QWidget的相关事件处理函数来处理。函数会捕获所有类型的平板事件,并根据不同事件类型输出相关信息。你可以根据实际需求修改此函数以实现具体功能,比如绘画应用中的压力敏感绘图等功能。以下是一个简单的例子,在一个自定义的QWidget中处理。原创 2024-02-06 11:26:24 · 703 阅读 · 0 评论 -
Qt-互斥量-临界区-QMutex-QMutexLocker-QReadWriteLock
是Qt提供的一种便捷类,用于自动管理QMutex对象的锁定和解锁过程,可以有效避免忘记解锁互斥量导致的死锁问题。是Qt提供的互斥量类,它实现了互斥锁的功能。当一个线程对某个资源进行访问时,可以使用QMutex进行锁定,这样其他尝试获取该锁的线程将被阻塞,直到拥有锁的线程释放它。在一个多线程环境下,通常会有多个读取者线程同时访问共享资源(但不能同时有写入者),而写入者线程在进行写操作时需要独占资源。是Qt中提供的一种更为灵活的锁机制,它允许更高的并发性,因为它区分了读锁和写锁。原创 2024-02-02 11:25:34 · 1202 阅读 · 0 评论 -
ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组织形成的。在动态库中函数和变量的地址是相对地址而不是绝对地址,其真实地址在调用动态库的程序加载时形成的。动态库的名字有别名(soname), 真名(realname)和链接名(linkername)。别名是由一个lib前缀,然后是库的名字,最后以“.so”结尾来构成。原创 2023-12-12 08:41:10 · 1448 阅读 · 0 评论 -
ubuntu-更改镜像源-系统初始化-安装Clion-C++编译环境-Java安装
熟练使用VS开发C++的同学,可以直接在windows下进行开发,必须使用标准C++,不要使用windows sdk相关的库和接口,然后在ubuntu下进行调试梳理,一般建议直接在ubuntu下开发,这样可以最大限度的减轻相关工作量。原创 2023-12-11 09:31:45 · 751 阅读 · 0 评论 -
boost-字符串处理-判断-查找-裁剪-删除-替换-分割-合并
分类函数:is_space、is_alnum(字符和数字)、is_alpha(字母)、is_cntrl(控制符)、is_digit(十进制)、is_graph(图形字符)、is_lower(小写)、is_upper(大写)、is_print(可打印字符)、is_punct(标点符号)、is_xdigit(十六进制)、is_any_of(是否是序列中的任意字符)、if_from_range(是否位于指定区间,包括两头)to_lower:将原来字符串,转换为小写字符串,原来字符串改变。原创 2023-12-05 11:39:29 · 1491 阅读 · 0 评论 -
boost-filesystem-删除复制文件-设置文件权限-递归创建删除复制文件夹-解析文件名-C++
boost::filesystem是Boost C++ Libraries中的一个模块,主要作用是处理文件(Files)和目录(Directories)。该模块提供的类boost::filesystem::path专门用来处理路径。而且,该模块中还有很多独立的函数能够用来执行创建目录、检查文件是否存在等任务。原创 2023-12-03 10:06:16 · 1455 阅读 · 0 评论 -
win32-注册表-32位-64位-读写值-Qt-C++
注册表,是windows系统保存配置的地方,64位系统为了兼容32位,又做了许多兼容的设计,才出现了这些过渡的配置。原创 2023-10-20 08:12:04 · 569 阅读 · 0 评论 -
C++-Win32-共享内存-传递数据-进程隔离
通过使用共享内存将数据传递到目标进程,目标进程使用完毕之后,返回结果,主程序读取结果,释放共享数据。更复杂的端对端通信,可能采取更复杂的方式来通信。原创 2023-10-08 09:35:01 · 514 阅读 · 0 评论 -
C++-win32-SendMessage-最简单的进程间消息传递-消息钩子
使用消息钩子会出现bug。原创 2023-09-28 10:46:05 · 767 阅读 · 0 评论 -
Qt-QImage-convertTo-copy-convertToFormat-格式转换
QImage是Qt中复杂的图像处理对象,有利于生成指定图像结果。原创 2023-09-26 12:34:34 · 654 阅读 · 0 评论 -
Qt-键盘消息的传递-键盘消息的获取-C++
QKeyEvent 类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件。QKeyEvent 的 key() 函数可以获取具体的按键,对于 Qt 中给定的所有按键,可以在帮助中查看 Qt: :Key 关键字。需要特别说明的是,回车键在这里是 Qt::Key_Return;原创 2023-09-20 11:47:10 · 1455 阅读 · 0 评论 -
Qt-QTransform-内存结构-仿射变换-工作原理-C++
QTransform是Qt中推荐的矩阵变换类。转换指定如何平移,缩放,剪切,旋转或投影坐标系,通常在渲染图形时使用。QTransform类支持矩阵乘法,加法和减法,并且可以流式传输和比较该类的对象。使用改对象时,需要清楚Qt视图使用的坐标系。逻辑视图和物理视图,都为x值向右增加;y值向下增加。QTransform类在此环境中使用。QTransform实现的矩阵乘法,点向量在前,乘以矩阵,依次实现变换效果。使用QTransform进行仿射变换时,一定要注意坐标空间,X向右为正,Y向下为正。原创 2023-09-08 18:02:27 · 820 阅读 · 1 评论 -
fatal error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
但是,计算机生成的代码或大量使用模板库的代码可能需要可存放更多节的 .obj 文件。只有 Visual C++ 2005(或更高版本)中提供的链接器才能使用通过 /bigobj 生成的 .obj 文件。/bigobj将该地址容量增加至 4,294,967,296 (2^32)。大多数模块将从来不会生成包含数超过 65,536 的 .obj 文件。默认情况下,对象文件最多可存放 65,536 (2^16) 个可寻址的节。属性>单击“C/C++”项。> 命令行 其它添加选项。原创 2023-08-03 09:25:50 · 2021 阅读 · 0 评论 -
c++-操作符重载-类成员函数重载-全局函数重载-符号重载
C++操作符重载,主要是扩展现有符号在自定义对象上的使用,符号重载时,不应该背离符号原有含义,使代码丧失可读性。原创 2023-07-25 16:43:46 · 784 阅读 · 0 评论 -
MessageBoxA-函数原型-消息提示-显示为顶层窗口
MB_DEFBUTTON2样式将默认焦点设置为消息框的第二个按钮,在本例中为“重试”按钮。如果消息框有“取消”按钮,则如果按下 ESC 键或选择“取消”按钮,该函数将返回 IDCANCEL 值。如果消息框没有 “取消 ”按钮,则按 ESC 将不起作用 - 除非存在MB_OK按钮。如果显示MB_OK按钮,并且用户按下 ESC,则返回值将为 IDOK。显示一个模式对话框,其中包含系统图标、一组按钮和一条简短的应用程序特定消息,例如状态或错误信息。若要指示消息框中显示的按钮,请指定以下值之一。原创 2023-05-28 12:00:40 · 1482 阅读 · 0 评论 -
Js-Base64-转文件对象-文件对象转Base64-数据交互
通过将二进制文件转Base64字符串,然后再通过JS将Base64字符串转Js内部文件对象,以此达到Js访问本地文件的目的。原创 2023-04-24 19:06:44 · 489 阅读 · 0 评论 -
win32-C++-自定义资源文件-读取-保存文件-rc-qt
头文件# pragma once //将自定义资源保存到文件 class ZLWin32CustomResource {public :实现文件//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可 HRSRC hRsrc = FindResourceW(NULL , resID , resType);//获取资源的大小 DWORD dwSize = SizeofResource(NULL , hRsrc);原创 2023-03-29 08:53:44 · 759 阅读 · 0 评论 -
win32-添加ATL支持-ATL头文件-CAtlFileMapping-共享内存的使用-c++-进程通信
通过简单的代码,就能跨进程,实现类结构的数据共享,这是使用CAtlFileMapping的优势,底层仍然是win32共享内存API的封装,感兴趣的读者可查看一下ATL源码。原创 2023-03-23 17:03:14 · 408 阅读 · 0 评论 -
libcef-JavaScript与C++通信-原理与实现-文档原文
Chromium和CEF使用V8 JavaScript引擎来实现内部JavaScript (JS)。浏览器中的每个框架都有自己的JS上下文,为在该框架中执行的JS代码提供作用域和安全性(更多信息请参阅“使用上下文”部分)。CEF为客户端应用程序的集成提供了大量的JS特性。在CEF3中,Blink (WebKit)和JS的执行在一个单独的渲染程序中运行。渲染器进程中的主线程被标识为TID_RENDERER,所有V8的执行都必须在这个线程上进行。原创 2023-03-16 09:35:08 · 734 阅读 · 0 评论 -
C++如何检测VS运行时库安装成功?
MsiQueryProductStateA函数实现安装产品查询。如有疑问,敬请留言。原创 2023-03-07 10:42:00 · 1013 阅读 · 0 评论 -
Qt-QProcess-启动子进程-控制台进程隐藏-获取子进程标准输出和返回码
当有新的标准输出数据可⽤时,它也会发出readyReadStandardOutput()信号,⽽当有新的标准错误数据可⽤时,它会发出readyReadStandardError()信号。⽆需调⽤read()函数,readLine()函数或getChar()函数,⽽是可以通过调⽤readAllStandardOutput()函数或readAllStandardError()函数显式地从两个通道之⼀读取所有数据。这样生成的程序,窗口需要程序编码创建,不创建则没有窗口,从而达到无显示的隐藏效果。原创 2023-02-21 11:03:22 · 3855 阅读 · 2 评论 -
Sandboxie-沙箱软件-编译说明-模块解析
LowLevel.dll作为资源嵌入到SbieSvc.exe中(参见core\svc\lowlevel.rc)。目录SandboxWUAU(\apps\com\WUAU)。目录SandboxRpcSs(\apps\com\RpcSs)。目录Common(\apps\common)。目录SbieIni(\apps\ini)。目录SboxDcomLaunch(\apps\com\DcomLaunch)。目录SboxDll(\core\dll)。创建Sbie注入DLL。目录Start(\apps\start)。原创 2023-02-17 09:54:34 · 1850 阅读 · 0 评论 -
Qt-源码部分编译-C++
opensource 使用 opensource 版本的Qt(相对于 -commercial 选项)-debug 只编译出 debug 版本,是默认选项(相对于 -release 选项)-shared 使用共享库,是默认选项(相对于 -static 选项)-no-qml-debug 不编译 qml debug 的支持。-debug-and-release 两种版本都编译。-no-openssl 不编译 openssl。-iconv 开启 iconv 的支持。-no-iconv 不编译 iconv。原创 2023-02-03 08:04:56 · 625 阅读 · 0 评论 -
Qt-QObject-对象树模型-查找子控件-类方法信息-QDebug信息重定位-调用槽函数
QObject 以对象树的形式组织起来。当为一个对象创建子对象时,子对象会自动地添加到父对象的children()列表中。父对象拥有子对象的所有权,比如父对象可以在自己的析构函数中删除它的孩子对象。使用findChild()或findChildren()通过名字和类型查询孩子对象。在元数据中含有此对象的函数方法信息。含方法在源代码中的名称,及按序号调用的函数内存地址。可以将QDebug函数信息输出到指定控制台,文件或者其它载体上。QObject的元数据中含有此对象的类层次信息。如有疑问,敬请留言。原创 2023-02-01 08:31:54 · 760 阅读 · 0 评论 -
Qt-C++-信号槽-调用形式-逆向分析-槽函数定位
从上面的源码可知,如果需要真正的逆向定位槽函数,关键在于找到qt_static_metacall函数,找到qt_meta_stringdata_QtConnect所在位置可知槽函数的源码名称。qt_static_metacall函数是当前类对象槽函数的上级函数,可以根据此特征,在一些有提示的按钮上,快速找到此函数。信号槽是一种观察者模式的实现。是Qt的核心骨架之一。按序号索引上级函数。如有疑问,敬请留言。原创 2023-01-31 09:26:27 · 1002 阅读 · 0 评论 -
Qt-C++-QMetaObject-元数据类-存储Qt类的基本信息-槽函数逆向定位
从上面的源码可知,如果需要真正的逆向定位槽函数,关键在于找到qt_static_metacall函数,找到qt_meta_stringdata_QtConnect所在位置可知槽函数的源码名称。qt_static_metacall函数是当前类对象槽函数的上级函数,可以根据此特征,在一些有提示的按钮上,快速找到此函数。在qt_meta_stringdata_QtConnect 这个变量中,保存了槽函数调用名称,在qt_meta_data_QtConnect中有调用函数的序号索引。如有疑问,敬请留言。原创 2023-01-31 09:22:23 · 849 阅读 · 2 评论 -
C++-lambda表示式-简短函数对象的效率写法-函数对象(仿函数)
④ c++14中增加广义捕获(Generalized capture):即在捕获子句中增加并初始化新的变量,该变量不需要在lambda表达式所处的闭包域中存在;捕获的外部变量列表,通过逗号分隔,可进行传值捕获或者引用捕获,lambda表达式与这些捕获的外部变量会构成一个闭包(Closure),外部变量为闭包的成员变量。lambda表达式的闭包含有局部变量的引用(悬挂引用 Dangling references),在超出创建它的作用域之外的地方被使用的话,将引发内存越界访问。如有疑问,敬请留言。原创 2023-01-30 17:16:18 · 450 阅读 · 0 评论 -
C++-win32-进程打开控制台-输出临时数据
头文件用于包含一个全局唯一对象,输出信息到控制台。实现文件,主要实现显示控制台功能。原创 2023-01-29 17:08:21 · 583 阅读 · 0 评论