MSDN.WhiteKnight - Stack Overflow answers
Ответ на "не возможно создать экземпляр абстрактного класса"
Answer 1113321
У вас реализованы не все чистые виртуальные функции; и те что есть, реализованы неправильно (нет virtual) и под блоком
#if 0
, поэтому они вообще не учитываются. Чтобы создать заготовку для всех нужных реализаций, в Visual Studio, например, можно использовать рефакторинг: правой кнопкой по интерфейсу -> Быстрые действия и рефакторинг -> Реализовать чистые виртуальные функции для ....Либо просто скопировать определение интерфейса и заменить все "=0" на реализацию. Вот минимально компилируемая заготовка для вашего класса:
class notify : public IUserNotification2, public IUserNotificationCallback { public: // Унаследовано через IUserNotification2 virtual HRESULT __stdcall QueryInterface(REFIID riid, void ** ppvObject) override { return 0; } virtual ULONG __stdcall AddRef(void) override { return 0; } virtual ULONG __stdcall Release(void) override { return 0; } virtual HRESULT __stdcall SetBalloonInfo(LPCWSTR pszTitle, LPCWSTR pszText, DWORD dwInfoFlags) override { return 0; } virtual HRESULT __stdcall SetBalloonRetry(DWORD dwShowTime, DWORD dwInterval, UINT cRetryCount) override { return 0; } virtual HRESULT __stdcall SetIconInfo(HICON hIcon, LPCWSTR pszToolTip) override { return 0; } virtual HRESULT __stdcall Show(IQueryContinue * pqc, DWORD dwContinuePollInterval, IUserNotificationCallback * pSink) override { return 0; } virtual HRESULT PlaySoundW(LPCWSTR pszSoundName) { return E_NOTIMPL; } // Унаследовано через IUserNotificationCallback virtual HRESULT __stdcall OnBalloonUserClick(POINT * pt) override { return 0; } virtual HRESULT __stdcall OnLeftClick(POINT * pt) override { return 0; } virtual HRESULT __stdcall OnContextMenu(POINT * pt) override { return 0; } };
Возможно, вам все это не нужно, посмотрите более простые примеры для работы с уведомлениями.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.