首页 > 解决方案 > 使用 SetIcon 时出现警告 C6387

问题描述

代码:

m_hStatusBarZoomFactorIcon =
        CMeetingScheduleAssistantApp::HICONFromCBitmap(
m_mapMenuBitmap[MAKEWPARAM(MenuNavigation::View, SubMenuPos::Zoom)]);
    VERIFY(m_hStatusBarZoomFactorIcon);
    m_StatusBar.GetStatusBarCtrl().SetIcon(
        to_underlying(StatusBarPane::ProgressOrZoomFactor), m_hStatusBarZoomFactorIcon);

变量分别是HICONCStatusBar。为什么我会收到此警告?

警告 C6387 m_hStatusBarZoomFactorIcon可能是0:这不符合函数规范CStatusBarCtrl::SetIcon

标签: visual-c++mfcstatusbarcode-analysis

解决方案


您应该在调用函数之前添加代码以检查它m_hStatusBarZoomFactorIcon是否有效(即为空) :SetIcon()

m_hStatusBarZoomFactorIcon =
    CMeetingScheduleAssistantApp::HICONFromCBitmap(
        m_mapMenuBitmap[MAKEWPARAM(MenuNavigation::View, SubMenuPos::Zoom)]);
//  VERIFY(m_hStatusBarZoomFactorIcon); // vide infra
    if (m_hStatusBarZoomFactorIcon) { // Only use it if it's valid ...
        m_StatusBar.GetStatusBarCtrl().SetIcon(
            to_underlying(StatusBarPane::ProgressOrZoomFactor), 
            m_hStatusBarZoomFactorIcon);
    }
    else {
        // Error handling code
    }

注意:如果您依赖该VERIFY(m_hStatusBarZoomFactorIcon);语句来处理该检查,那么请注意,除非还定义了宏(即在调试版本中),否则它实际上不会扩展为任何内容。_DEBUG来自 afx.h:

//...
#else   // _DEBUG

#define VERIFY(f)          ((void)(f))
///

推荐阅读