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 + "应用安装失败。"); }
相关推荐
Lucis__3 小时前
基于Cache替换算法的LRU缓存实现
数据结构·c++·算法·缓存·lru
Cx330❀9 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c238569 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
辞旧 lekkk9 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
持力行12 小时前
C++与Java变量声明、定义及内存分配的核心区别
java·开发语言·c++
Rainy Blue88313 小时前
C转C++速成
c语言·c++·算法
txzrxz13 小时前
二分图详解
数据结构·c++·算法·图论·深度优先搜索·二分图染色
jinyishu_13 小时前
C++ 继承全解:从基础到高级特性
开发语言·c++
是个西兰花13 小时前
Linux:死锁与生产者消费者模型解析
linux·运维·服务器·c++·死锁·生产者消费者模型
exm-zem14 小时前
从C语言到C++:C++入门1
c语言·c++