Игнорирование макроса
Описываю в 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")
но это отменит макрос по всему проекту, что тоже нежелательно