<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[maoyeahcom的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/maoyeahcom</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; maoyeahcom]]></copyright><item><title><![CDATA[打印文件和目录结构，以及其文件内容的命令行工具ls2【ls、tree、find、fd、exa、bat、Linux/Windows/MacOS】]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/148808293</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/148808293</guid><author>maoyeahcom</author><pubDate>Sat, 21 Jun 2025 14:11:45 +0800</pubDate><description><![CDATA[摘要：ls2是一款全新命令行工具，结合目录结构展示与文件内容查看功能。相比现有工具（如tree仅显示结构、find需复杂过滤），ls2支持：1) 递归显示目录/文件及内容；2) 灵活忽略通配路径（如*/.git）；3) 多种显示模式（纯结构/带文件名/含内容）。该工具填补了现有命令的空白，提供一体化解决方案。支持Windows/Linux/MacOS，需配置环境变量后使用。]]></description><category></category></item><item><title><![CDATA[VC++6.0的gdi+示例Demo（VC6+GdiPlus）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/148183308</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/148183308</guid><author>maoyeahcom</author><pubDate>Tue, 03 Jun 2025 10:42:11 +0800</pubDate><description><![CDATA[本文介绍了使用GDI+实现图像显示的技术要点，包括静态图片加载、GIF动画播放还原、渐变色绘制等功能。关键技术涉及GDI+库的初始化、双缓冲绘图机制，以及GIF帧延迟处理。文章展示了jpg/png/gif等多种格式的显示效果，重点讲解了如何通过内存DC实现无闪烁渲染，并提供了渐变画刷的使用示例。代码片段展示核心功能实现，包括GDI+环境设置、双缓冲绘图流程和资源释放。完整项目代码已上传至优快云资源平台。]]></description><category></category></item><item><title><![CDATA[去除代码里的注释（不限语言，因为注释符自己定义）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/146174711</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/146174711</guid><author>maoyeahcom</author><pubDate>Tue, 11 Mar 2025 11:43:32 +0800</pubDate><description><![CDATA[上面的@符换成_  即是v.x。]]></description><category></category></item><item><title><![CDATA[VMware黑苹果macOS上装IDEA/GoLand需要进入恢复模式（Recovery）禁用 SIP]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/145164132</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/145164132</guid><author>maoyeahcom</author><pubDate>Wed, 15 Jan 2025 18:01:50 +0800</pubDate><description><![CDATA[提示“done. the “kill Dock” command can fix the crash issue. ” 表示成功，否则检查一下前面的步骤。如果没有这项，而全是 .x.im4m 这种结尾的，那么就要看方案三。的破解步骤，只说解决“Key is invalid”的问题，所以简单描述。如果觉得反正是虚拟机，玩坏了也没事，那可以长期禁用SIP，会解除很多限制，但因此带来的风险也得自己考虑。本文仅为学习测试之用，如果用作其它用途而带来的风险，后果自负！，因此请谨慎操作，执行你需求的操作后，可以。]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第五篇（多重继承，有虚函数覆盖）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108873594</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108873594</guid><author>maoyeahcom</author><pubDate>Fri, 09 Oct 2020 19:14:10 +0800</pubDate><description><![CDATA[【VC++】虚函数 内存结构 - 第五篇（多重继承，有虚函数覆盖）

]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第四篇（多重继承，无虚函数覆盖）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108873586</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108873586</guid><author>maoyeahcom</author><pubDate>Thu, 08 Oct 2020 19:01:40 +0800</pubDate><description><![CDATA[【VC++】虚函数 内存结构 - 第四篇（多重继承，无虚函数覆盖）

]]></description><category></category></item><item><title><![CDATA[【 C/C++】变量在内存里的存储区域]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108940270</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108940270</guid><author>maoyeahcom</author><pubDate>Thu, 08 Oct 2020 11:57:14 +0800</pubDate><description><![CDATA[C/C++语言在内存中一共分为如下几个区域，分别是：


内存栈区： 编译期间就能确定存储大小，运行时自动分配释放。存放函数的参数值、返回地址、局部变量的值等。在函数作用域内创建，在离开作用域后自动销毁。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。其操作方式类似于数据结构中的栈。
存储空间是连续的，两个紧密挨着定义的局部变量，他们的存储空间也是紧挨着的。栈的大小是有限的，通常Visual C++编译器的默认栈的大小为1MB，所以不要定义int a[1000000]这样的超大数组。


内存堆]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第三篇（篇外篇）（类有无实体对象，对虚函数表的影响研究）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108870301</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108870301</guid><author>maoyeahcom</author><pubDate>Tue, 29 Sep 2020 18:01:51 +0800</pubDate><description><![CDATA[本文只是研究，并不一定正确，更不会很系统全面。若有错误，还请斧正！
先贴上 完整代码：
#include &lt;IOSTREAM&gt;		//原创：https://blog.youkuaiyun.com/maoyeahcom/
#include &lt;Windows.h&gt;	//转载请指明出处，请勿用于商业用途
using namespace std;	//仅用于研究，不权威，可能存在错误

class Base{
public:
	virtual void F(){	cout&lt;&lt;"Base::F]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第三篇（单继承，有虚函数覆盖）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108775609</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108775609</guid><author>maoyeahcom</author><pubDate>Fri, 25 Sep 2020 21:17:25 +0800</pubDate><description><![CDATA[【VC++】虚函数 内存结构 - 第三篇（单继承，有虚函数覆盖）
#include &lt;IOSTREAM&gt;
using namespace std;

class Base
{
public:
	int nBase1;
	int nBase2;
	
	Base(int n1,int n2):nBase1(n1),nBase2(n2)
	{
		cout&lt;&lt;"Base::Base("&lt;&lt;n1&lt;&lt;","&lt;&lt;n2&lt;&lt;")"&lt;&lt;end]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第二篇（单继承，无虚函数覆盖）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108771096</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108771096</guid><author>maoyeahcom</author><pubDate>Thu, 24 Sep 2020 15:11:21 +0800</pubDate><description><![CDATA[【VC++】虚函数 内存结构 - 第二篇（单继承，无虚函数覆盖）
#include &lt;IOSTREAM&gt;
using namespace std;

class Base
{
public:
	int nBase1;
	int nBase2;
	
	Base(int n1,int n2):nBase1(n1),nBase2(n2)
	{
		cout&lt;&lt;"Base::Base("&lt;&lt;n1&lt;&lt;","&lt;&lt;n2&lt;&lt;")"&lt;&lt;end]]></description><category></category></item><item><title><![CDATA[【VC++】虚函数 内存结构 - 第一篇（单类）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108728608</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108728608</guid><author>maoyeahcom</author><pubDate>Wed, 23 Sep 2020 17:27:04 +0800</pubDate><description><![CDATA[前言 - 为何写此系列文章？
网上讨论虚函数内存结构的文章很少，好不容易有几位大神写了几篇很精彩的文章，结果里面还有错误：
陈皓大神的《C++ 虚函数表解析》：
https://blog.youkuaiyun.com/haoel/article/details/1948051
《C++ 对象的内存布局（上）》：
https://blog.youkuaiyun.com/haoel/article/details/3081328
《C++ 对象的内存布局（下）》：
https://blog.youkuaiyun.com/haoel/article]]></description><category></category></item><item><title><![CDATA[Release版崩溃，用VS调试dump文件，定位代码出错行【VC++/Visual Studio】]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108583124</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108583124</guid><author>maoyeahcom</author><pubDate>Mon, 14 Sep 2020 18:00:00 +0800</pubDate><description><![CDATA[人为制造一个崩溃，先直接看效果图：

下面是实现过程，本文是VS2017为例：
dump.h：
#pragma once
// dump.h
#include &lt;windows.h&gt;
extern LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo);

dump.cpp：
// dump.cpp
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include ]]></description><category></category></item><item><title><![CDATA[去掉/添加 代码行号（清除/增加 代码行号）（网上拷的代码有行号，去除行号）（自己写的代码前面加上行号）]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108281995</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108281995</guid><author>maoyeahcom</author><pubDate>Fri, 28 Aug 2020 17:53:57 +0800</pubDate><description><![CDATA[有时，在网上copy的代码时，前面会有行号。
代码少时，一行行 手工删除行号，还行；
但代码多时，手工删除就笨拙了！
有种方法，就是用正则表达式替换，但还是有点“打脑壳”，
那就用我下面写的这个工具吧，简单快捷：

后面工具又更新了，加入逆向功能“添加行号”：

=======================================================================
人和动物，最大的区别是：制造和使用工具。
我负责“制造”，你负责“使用”，这才符合人类的行为   o&l]]></description><category></category></item><item><title><![CDATA[如何确定两个 时间不同 的exe（或DLL），其对应的源代码 有没有改动？同一源码，编译两次，其MD5值不一样！【vc++/dumpbin】]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108142389</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108142389</guid><author>maoyeahcom</author><pubDate>Fri, 21 Aug 2020 12:00:18 +0800</pubDate><description><![CDATA[一般情况，我们确定 两个文件 内容是否一样，一般是看其MD5值是否一样。

`
但是 同一套VC++代码，不作任何改动的情况下，每次生成的exe（或DLL），其MD5值都是不同的。

这种情况下，怎么确定其对应的源码是一样的（没有作改动）？
一种解决方案，用工具：dumpbin
如果你机子上装了 VS，一般都会有 dumpbin


如果装了多个VS版本，可以选一个版本最高的VS，其目录下的dumpbin（如64位目录下的），加入环境变量，方便以后经常使用。
命令格式：
dumpbin /disasm 我的]]></description><category></category></item><item><title><![CDATA[判断PE文件（可执行程序exe、动态链接库dll）是32位，还是64位？]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108131383</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108131383</guid><author>maoyeahcom</author><pubDate>Thu, 20 Aug 2020 20:56:37 +0800</pubDate><description><![CDATA[方法有很多，本文只介绍三种方法：
================================================================================
方法一： 最简单粗暴的方法：
直接用记事本或者notepad++（文本编辑软件都可）打开exe文件（dll文件），
会有很多乱码，接下来只需要在第二段中找到PE两个字母，在其后的不远出会出现d? 或者L。
若是L，则证明是32位；
若是d，则证明该程序是64位。
32位（x86）：

64位（x64）：

====]]></description><category></category></item><item><title><![CDATA[GetTextExtent、GetTextExtentPoint32 精确无误差的使用注意【vc++ / MFC】]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/108123515</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/108123515</guid><author>maoyeahcom</author><pubDate>Thu, 20 Aug 2020 15:24:00 +0800</pubDate><description><![CDATA[网上有大量的有关“获取字符串的显示宽度”的文章，基本都是用 GetTextExtent 或 GetTextExtentPoint32，但大多数都没说字体的影响，直接结果是误差很大，包括MSDN上的示例：

MSDN这段示例原代码：
// Pointer to the myListBox.
extern CListBox* pmyListBox;

// Find the longest string in the list box.
CString str;
CSize   sz;
int     dx=0]]></description><category></category></item><item><title><![CDATA[C++ 调试值、打印值，不一样！！！！]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/107166648</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/107166648</guid><author>maoyeahcom</author><pubDate>Mon, 06 Jul 2020 20:03:20 +0800</pubDate><description><![CDATA[VC6、VS2013上都试过。贴上代码，大家可以研究一下：
#include &lt;IOSTREAM&gt;
using namespace std;

int main(int argc, char* argv[])
{
	const int a = 3;
	cout&lt;&lt;"原a: "&lt;&lt;a&lt;&lt;endl;
	const_cast&lt;int&amp;&gt;(a) = 4;	
	cout&lt;&lt;"后a: "&lt;&lt;a&lt;&lt;endl&lt;&.]]></description><category></category></item><item><title><![CDATA[C++  一般（普通）函数指针、类成员函数指针，用法区别，以及 强制转换]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/107106680</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/107106680</guid><author>maoyeahcom</author><pubDate>Fri, 03 Jul 2020 15:56:11 +0800</pubDate><description><![CDATA[直接上代码：
#include &lt;iostream&gt;

class CClass
{
public:		
	//类 函数指针
    void (*pClass_Func_Pointer)(int a);

	//类 静态函数
    static void class_Static_Func(int a)
    {
        cout&lt;&lt;a&lt;&lt;"访问：类 静态成员函数"&lt;&lt;endl;
    }
	
	//类 函数
    void class_Fu]]></description><category></category></item><item><title><![CDATA[VC++ 的 CImageList 绘制背景透明的位图]]></title><link>https://blog.youkuaiyun.com/maoyeahcom/article/details/103827098</link><guid>https://blog.youkuaiyun.com/maoyeahcom/article/details/103827098</guid><author>maoyeahcom</author><pubDate>Fri, 03 Jan 2020 21:03:47 +0800</pubDate><description><![CDATA[程序效果图

]]></description><category></category></item></channel></rss>