1 /* 2 * Copyright 2019 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkObjBase_DEFINED 9 #define SkObjBase_DEFINED 10 11 #include "src/core/SkLeanWindows.h" 12 #include <objbase.h> 13 14 // STDMETHOD uses COM_DECLSPEC_NOTHROW, but STDMETHODIMP does not. This leads to attribute mismatch 15 // between interfaces and implementations which produces warnings. In theory a COM component should 16 // never throw a c++ exception, but COM_DECLSPEC_NOTHROW allows tweaking that (as it may be useful 17 // for internal only implementations within a single project). The behavior of the attribute nothrow 18 // and the keyword noexcept are slightly different, so use COM_DECLSPEC_NOTHROW instead of noexcept. 19 // Older interfaces like IUnknown and IStream do not currently specify COM_DECLSPEC_NOTHROW, but it 20 // is not harmful to mark the implementation more exception strict than the interface. 21 22 #define SK_STDMETHODIMP COM_DECLSPEC_NOTHROW STDMETHODIMP 23 #define SK_STDMETHODIMP_(type) COM_DECLSPEC_NOTHROW STDMETHODIMP_(type) 24 25 #endif 26