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

VS2022编译报错:CPrintDialogEx::Release与IPrintDialogCallback异常规范不兼容

编译错误E0766:CPrintDialogEx::Release与IPrintDialogCallback::Release异常规范不兼容问题

我用MFC和AutoCAD ARX SDK开发了一个大型DLL库,编译时编译器抛出错误E0766:虚函数“CPrintDialogEx::Release”的异常规范与被重写函数“IPrintDialogCallback::Release”不兼容。

涉及的类均为标准MFC或Windows库:

commdlg.h中的IPrintDialogCallback定义

DECLARE_INTERFACE_IID_(IPrintDialogCallback, IUnknown, "5852A2C3-6530-11D1-B6A3-0000F8757BF9")
{
    // *** IUnknown methods ***
    STDMETHOD(QueryInterface) (THIS_ _In_ REFIID riid, _Outptr_ void **ppvObj) PURE;
    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    // *** IPrintDialogCallback methods ***
    STDMETHOD(InitDone) (THIS) PURE;
    STDMETHOD(SelectionChange) (THIS) PURE;
    STDMETHOD(HandleMessage) (THIS_ HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, 
    LRESULT *pResult) PURE;
};

其中宏STDMETHOD展开为:

virtual __declspec(nothrow) HRESULT __stdcall QueryInterface

afxdlgs.h中的CPrintDialogEx定义

class CPrintDialogEx :
public CCommonDialog,
public IPrintDialogCallback,
public IObjectWithSite
{   ....
      STDMETHOD(QueryInterface)(REFIID riid, void** ppvObject);
      virtual ULONG STDMETHODCALLTYPE AddRef();
      virtual ULONG STDMETHODCALLTYPE Release();
       ...
};

这个错误有个特殊之处:仅当代码中存在其他错误时才会触发,修复所有自有代码的问题后就能正常编译。另外,在VS2019中编译完全没有这个问题,想请教这是VS2022的bug还是其他原因?

错误截图


内容的提问来源于stack exchange,提问作者Michal Hadraba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:09