MFC为什么不报空指针异常 2宏定义不改源码 用替换 用Log函数替换printf等 #define printf Log 优化版底层类Log显示

这里pWnd为NULL,但MFC为什么不报空指针异常,而是调用了当前文件的ShowInfo函数。

进入ShowInfo函数后m_editDisplay又是空指针,直接忽略了这句,继续向后执行。



2宏定义不改源码 用替换 用Log函数替换printf等 #define printf Log

优化版底层类Log显示

cpp 复制代码
方法一:
//全局定义
CEdit* m_edit;

在初始化里
m_edit = &edit; // 指向当前界面edit

Log里操作edit显示


方法二:
void(*pLogMethod)(const char* strMsg, ...); //定义一种函数指针类型
pLogMethod g_pLogMethod = nullptr; 

static void Log(const char* strMsg, ...)
{
	char szBuf[3000] = "";
	va_list varg;
	va_start(varg, strMsg);
	int iRet = vsprintf_s(szBuf, strMsg, varg);
	va_end(varg);

	pWnd->ShowInfo(szBuf); //这里可以直接操作edit控件显示。
}
CConfigDlg::CConfigDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DIALOG_VersionCompareWriteConfig, pParent)
{	
	pWnd = this;
	g_pLogMethod = Log; 
}


使用 if (g_pLogMethod != nullptr) { g_pLogMethod(app + "应用安装失败。"); }
相关推荐
REDcker14 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
王老师青少年编程16 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:合并序列
c++·字符串·csp·高频考点·信奥赛·字符串排序·合并序列
handler0117 小时前
UDP协议与网络通信知识点
c语言·网络·c++·笔记·网络协议·udp
神仙别闹18 小时前
基于QT(C++)实现学生成绩管理系统
数据库·c++·qt
君义_noip18 小时前
CSP-S 2025 入门级 第一轮(初赛) 完善程序(1)
c++·算法·信息学奥赛·初赛·csp 第一轮
蜡笔小马20 小时前
07.C++设计模式-组合模式
c++·设计模式·组合模式
liulilittle20 小时前
TCP UCP v1.0:BBR 的非破坏性约束层
网络·c++·网络协议·tcp/ip·算法·c·通信
每天回答3个问题20 小时前
leetcodeHot100 | 104.二叉树的最大深度
c++·面试·
坚果派·白晓明21 小时前
【鸿蒙PC三方库移植适配框架解读系列】第五篇:完整流程图与角色职责
c语言·c++·华为·harmonyos·鸿蒙
xiao_li_ya21 小时前
C++学习日记1(`*`的理解、const关键词)
开发语言·c++