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 + "应用安装失败。"); }
相关推荐
噜噜噜噜鲁先森13 小时前
STL——String类
开发语言·c++·算法
谭欣辰13 小时前
详细讲解 C++ 有向无环图(DAG)及拓扑排序
c++·算法·图论
欧米欧13 小时前
C++算法之双指针算法
开发语言·c++
承渊政道13 小时前
【递归、搜索与回溯算法】(掌握记忆化搜索的核心套路)
数据结构·c++·算法·leetcode·macos·动态规划·宽度优先
REDcker13 小时前
跨平台编译详解 工具链配置与工程化实践
linux·c++·windows·macos·c·跨平台·编译
闻缺陷则喜何志丹13 小时前
【 线性筛 调和级数】P7281 [COCI 2020/2021 #4] Vepar|普及+
c++·算法·洛谷·线性筛·调和级数
叶子野格13 小时前
《C语言学习:数组》11
c语言·开发语言·c++·学习·visual studio
Little At Air13 小时前
C++priority_queue模拟实现
开发语言·数据结构·c++
程序员zgh13 小时前
C++ decltype 关键字 详解
c语言·开发语言·c++
乐观勇敢坚强的老彭14 小时前
C++信奥洛谷循环章节练习题
java·c++·算法