Здравствуйте, Вадим Никулин, Вы писали:
ВН>Скорее всего, Modify вызывается после деструктора. Ты бы кода побольше показал, тогда можно конкретнее сказать.
Вызывается Modify до деструктора, а код примерно такой:
CNotifyIcon * TrayIcon = new CNotifyIcon();
TrayIcon->Modify();
Так явно — нет memset(NotifyIconData, 0, sizeof(NOTIFYICONDATA)); перед началом заполнения. В итоге у тебя в чати полей мусор остается, в таких как szTip например, что черевато, поскольку это нулем закрытая строка.
А вообще выложи еще пример, как ты его юзаешь. Действительно сильно похоже, что ты зовешь метод с объекта, который уже разрушился.
Здравствуйте, Вадим Никулин, Вы писали:
ВН>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, _hunter, Вы писали:
B>>Для начала напиши оператор присваивания и конструктор копирования.
ВН>А зачем? В каком месте они требуются?
Очень вероятно, что где-то с помошью оператора присваивания или конструктора копирования создается временный объект, после смерти которого разрушается элемент NotifyIconData объекта-источника.
S> 1. Обнуляй структуру перед инициализацией.
Это правильно.
S> 2. Убедись что Icon1 — это реальный дескриптор иконки.
А вот из-за этого access violation быть не может
Здравствуйте, Кодт, Вы писали:
К>В качестве хинта: а зачем вообще создавать структуру на куче? Она же небольшая, можно прямо в теле объекта разместить. К>
Включать структуру по указателю полезно с целью уменьшения времени компиляции. Стандартные h-файлы не засоряют твои и и прекомпилляция работает более эффективно.