You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

COM接口智能指针作为函数参数触发C26415/C26418警告如何解决?

你之前修改时语法报错的核心原因是把参数写为了占位符T*,没有替换为实际的COM接口类型,按以下步骤修改即可消除警告:

步骤1:修改函数声明与定义

将参数中的智能指针类型替换为原生COM接口指针:

// 声明(头文件中)
void SetPublisherDatesNotAvailable(MSAToolsLibrary::IAvailability* pAvailability, 
                                   std::vector<COleDateTime>& rVectorDates, 
                                   DWORD dwNumDates);

// 定义(源文件中)
void CMSATools::SetPublisherDatesNotAvailable(MSAToolsLibrary::IAvailability* pAvailability, 
                                              std::vector<COleDateTime>& rVectorDates, 
                                              DWORD dwNumDates)
{
    // 原有内部代码不需要修改,直接用pAvailability->调用方法即可
    throw_if_fail(pAvailability->SetDatesNotAvailable(arr.parray));
}

步骤2:修改函数调用代码

调用时通过智能指针的GetInterfacePtr()方法获取原生接口指针传入:

MSAToolsLibrary::IAvailabilityPtr pAvailability = NULL;
throw_if_fail(pPublisher->get_Availability(&pAvailability));
if (pAvailability != NULL)
{
    std::vector<COleDateTime> vectorDates;
    const DWORD dwNumDates = InitDatesNotAvailableVector(vectorDates);
    // 传入原生接口指针
    theApp.MSAToolsInterface().SetPublisherDatesNotAvailable(pAvailability.GetInterfacePtr(), vectorDates, dwNumDates);
}

补充说明

  • 这种修改完全符合警告的修复规则:函数不需要管理COM对象的生命周期,仅访问对象成员时使用原生指针即可,不会改变原有代码的运行逻辑。
  • 如果你希望强制要求参数非空,也可以将参数改为接口引用MSAToolsLibrary::IAvailability&,调用时传入*pAvailability,函数内部使用.访问成员即可。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:03