Сообщение Re: Запрет выгрузки dll до момента освобождения последнего о от 26.10.2018 18:41
Изменено 26.10.2018 18:44 Alexander G
Re: Запрет выгрузки dll до момента освобождения последнего объекта из dll
Здравствуйте, Aniskin, Вы писали:
A>Что бы изучить получше оконную систему Windows решил я написать более-менее сложный контрол на чистом WinApi. Для одного из проектов мне нужно было дерево, отображающее себя несколько иначе по сравнению со стандартным SysTreeView32, его и решил реализовать. Контрол я успешно написал, оформил по взрослому, но осталась у меня одна не решенная проблема.
Я не думал, что такое кто-то делает в 2018.
A>Проблема возникает при завершении хост приложения. Хост приложение ничего не знает о том, что были запросы WM_GETOBJECT и есть живые объекты из dll, и может выгрузить dll, а лишь затем вызвать OleUninitialize. Соответственно при OleUninitialize, когда вызывается последний Release объекта, происходит AV.
A>Вопрос – как то можно это исправить в самой dll?
Может хранить референс на DLL в объекте?
GetModuleHandleEx со своим адресом с GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS и без GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS для AddRef
FreeLibrary для Release
A>Что бы изучить получше оконную систему Windows решил я написать более-менее сложный контрол на чистом WinApi. Для одного из проектов мне нужно было дерево, отображающее себя несколько иначе по сравнению со стандартным SysTreeView32, его и решил реализовать. Контрол я успешно написал, оформил по взрослому, но осталась у меня одна не решенная проблема.
Я не думал, что такое кто-то делает в 2018.
A>Проблема возникает при завершении хост приложения. Хост приложение ничего не знает о том, что были запросы WM_GETOBJECT и есть живые объекты из dll, и может выгрузить dll, а лишь затем вызвать OleUninitialize. Соответственно при OleUninitialize, когда вызывается последний Release объекта, происходит AV.
A>Вопрос – как то можно это исправить в самой dll?
Может хранить референс на DLL в объекте?
GetModuleHandleEx со своим адресом с GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS и без GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS для AddRef
FreeLibrary для Release
Re: Запрет выгрузки dll до момента освобождения последнего о
Здравствуйте, Aniskin, Вы писали:
A>Что бы изучить получше оконную систему Windows решил я написать более-менее сложный контрол на чистом WinApi. Для одного из проектов мне нужно было дерево, отображающее себя несколько иначе по сравнению со стандартным SysTreeView32, его и решил реализовать. Контрол я успешно написал, оформил по взрослому, но осталась у меня одна не решенная проблема.
Я не думал, что такое кто-то делает в 2018.
A>Проблема возникает при завершении хост приложения. Хост приложение ничего не знает о том, что были запросы WM_GETOBJECT и есть живые объекты из dll, и может выгрузить dll, а лишь затем вызвать OleUninitialize. Соответственно при OleUninitialize, когда вызывается последний Release объекта, происходит AV.
A>Вопрос – как то можно это исправить в самой dll?
Может хранить референс на DLL в объекте?
GetModuleHandleEx со своим адресом с GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS и без GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT для первого AddRef
FreeLibrary для последнего Release
A>Что бы изучить получше оконную систему Windows решил я написать более-менее сложный контрол на чистом WinApi. Для одного из проектов мне нужно было дерево, отображающее себя несколько иначе по сравнению со стандартным SysTreeView32, его и решил реализовать. Контрол я успешно написал, оформил по взрослому, но осталась у меня одна не решенная проблема.
Я не думал, что такое кто-то делает в 2018.
A>Проблема возникает при завершении хост приложения. Хост приложение ничего не знает о том, что были запросы WM_GETOBJECT и есть живые объекты из dll, и может выгрузить dll, а лишь затем вызвать OleUninitialize. Соответственно при OleUninitialize, когда вызывается последний Release объекта, происходит AV.
A>Вопрос – как то можно это исправить в самой dll?
Может хранить референс на DLL в объекте?
GetModuleHandleEx со своим адресом с GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS и без GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT для первого AddRef
FreeLibrary для последнего Release