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
相关产品推荐
相关产品推荐

