Игнорирование макроса

Описываю в Test.idl файле интерфейс

[
    uuid(92FAFEE3-71D8-49C6-91DD-8B1560C6FA68),
    dual,
    oleautomation
]
interface ITest : IDispatch {
    HRESULT _stdcall LoadIcon();
}

При компиляции этого файла получаю Test_i.h файл

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("92FAFEE3-71D8-49C6-91DD-8B1560C6FA68")
    ITest : public IDispatch
    {
    public:
        virtual HRESULT __stdcall LoadIcon( void) = 0;
    }

пишу реализацию

class ATL_NO_VTABLE CTestImpl :
    public ATL::CComObjectRoot,
    public ATL::CComCoClass<CTestImpl, &CLSID_CoTest>,
    public ATL::IDispatchImpl<ITest, &IID_ITest, &LIBID_TestLib, 1, 0>,
    public CComISupportErrorInfoImpl<&IID_ITest>
{
public:
    STDMETHOD(LoadIcon)() {return S_OK;}
}

и получаю ошибку

atlcom.h(3449,33): message : 'HRESULT ITest::LoadIconW()': is abstract
Test_i.h(232): message : see declaration of 'ITest::LoadIconW'

Откуда взялась LoadIconW? Просто в WinUser.h есть такое объявление

#ifdef UNICODE
#define LoadIcon  LoadIconW
#else
#define LoadIcon  LoadIconA
#endif // !UNICODE

Что можно сделать в такой ситуации? Переименовывать метод не хочу. Файл Test_i.h генерируется автоматически, поэтому его отредактировать не получится. Можно в Test.idl добавить

cpp_quote("#undef LoadIcon")

но это отменит макрос по всему проекту, что тоже нежелательно


Ответы (0 шт):