对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel

Posted

技术标签:

【中文标题】对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel【英文标题】:Use CTrace::SetLevel for a MFC project that is using a shared MFC core DLL 【发布时间】:2019-11-07 08:03:03 【问题描述】:

我有一个使用共享 MFC DLL (MFC140UD.DLL) 的 MFC 项目。

我想将调试版本中的跟踪级别设置为 4 级,以获取有关消息泵送的更多信息。

但是在我的代码中使用CTrace::SetLevel,只是在我的个人模块(我的 EXE 文件)中设置 CTrace 对象的调试级别。 CTrace 声明为 __declspec(selectany)。在 MFC140UD.LIB 的导出符号中,我看不到 CTrace 类或其成员的导出。

所以使用CTrace::SetLevel 对MFC 核心MFC140UD.DLL 没有影响。我总是必须在 atltrace.h 中设置断点,并且需要在调试器中修改静态 m_nLevel 值。

有什么技巧可以从我的外部 MFC EXE 访问 MFC 核心 DLL 中的 CTrace::m_nLevel 值吗?

注意:旧的 AtlTraceTool 也不再工作和支持。

【问题讨论】:

也许this issue 会有所帮助。 没有。这不包括我的问题,我知道如何使用跟踪的东西。如果我使用 MFC 的静态链接,一切都会好起来的。但我将 MFC 用作共享 DLL。 【参考方案1】:

应该不可能从外部 MFC EXE 访问 MFC 核心 DLL 内的 CTrace::m_nLevel 值。每个模块都有自己的 CTrace 类实例,也就是说,您应该在每个模块的上下文中将静态成员变量 CTrace::m_nLevel 设置为适当的值。因此,当您使用共享的 MFC DLL 时,恐怕您无法从自己的模块中配置 MFC140UD.DLL 中的跟踪级别。

您可以尝试调用 API AtlTraceModifyModule 来设置 MFC140UD.dll 的跟踪级别。

【讨论】:

我在 VS-2019 中没有看到这样的功能“AtlTraceModifyModule”

以上是关于对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel的主要内容,如果未能解决你的问题,请参考以下文章

在共享DLL中使用MFC 和在静态库中使用MFC的区别

CRichEditCtrl 在使用 MFC 编写的共享 dll 中无法正常工作?

非 MFC ATL 项目 (dll) 产生 MFC 相关错误

在共享DLL中使用MFC与在静态库中使用MFC的区别

在共享DLL中使用MFC与在静态库中使用MFC的区别

使用带有共享 mfc dll 的常规 dll