|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
Всем доброго дня, есть функция: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
содержащая устаревшие и уже исключённые из shell32.dll функции SHGetSpecialFolderLocation и SHGetMalloc. SHGetSpecialFolderLocation заменил так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
несовсем пойму смысл SHGetMalloc в этой функции. Для чего она тут? Заменить её можно через CoTaskMemAlloc и CoTaskMemFree. Но хотелось бы разобраться зачем она тут вообще. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 16:23 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun, назначение наверное всётаки понятно, - очистить память по указателю. А вот как заменить её на CoTaskMemAlloc и CoTaskMemFree тут? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 16:36 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun, возможно так? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 16:38 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotunНо хотелось бы разобраться зачем она тут вообще. Обычно для "разбирания читают документацию. https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetspecialfolderlocation A PIDL specifying the folder's location relative to the root of the namespace (the desktop). It is the responsibility of the calling application to free the returned IDList by using CoTaskMemFree. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 16:44 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да, спасибо. Тут я был но эту строчку просмотрел: A PIDL specifying the folder's location relative to the root of the namespace (the desktop). It is the responsibility of the calling application to free the returned IDList by using CoTaskMemFree. Но заменил походу правилько. И компилится и утечек не оставляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 16:53 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotunИ компилится и утечек не оставляет. Чисто держу в курсе: FastMM и ему подобные не в состоянии отследить утечку памяти, выделенной не с их помощью. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 17:13 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunИ компилится и утечек не оставляет. Чисто держу в курсе: FastMM и ему подобные не в состоянии отследить утечку памяти, выделенной не с их помощью. спасибо, буду знать. А как в таких случаях проверить на утечки? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 17:44 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun несовсем пойму смысл SHGetMalloc в этой функции. Для чего она тут? Заменить её можно через CoTaskMemAlloc и CoTaskMemFree. Но хотелось бы разобраться зачем она тут вообще. Да всё просто: ты раскопал говно мамонта времён Windows 95. В Windows 95 была функция SHGetMalloc, которая возвращала менеджер памяти по умолчанию. Именно так и работает код: получает менеджер памяти, а потом вызывает уже его функции. В Windows 2000 решили, что это дело можно упростить, и ввели функции-обёртки CoTaskMemAlloc и CoTaskMemFree, которые просто вызывают соответствующую функцию у менеджера памяти по умолчанию. Ну т.е. на псевдокоде: Код: pascal 1. 2. 3. 4. 5.
Таким образом, начиная с Windows 2000 можно вызывать CoTaskMemAlloc и/или CoTaskMemFree и это будет эквивалентно SHGetMalloc + вызов методов полученного менеджера памяти. Разницы при этом не будет никакой. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 18:26 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun, есть более простой способ получить путь к какой-нибудь стандартной папке. Правда написано , что SHGetFolderPath тоже устарелая (deprecated) и надо пользоваться SHGetKnownFolderPath. Но последняя примерно так же вызывается. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 18:31 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
GunSmoker hlopotun несовсем пойму смысл SHGetMalloc в этой функции. Для чего она тут? Заменить её можно через CoTaskMemAlloc и CoTaskMemFree. Но хотелось бы разобраться зачем она тут вообще. Да всё просто: ты раскопал говно мамонта времён Windows 95. В Windows 95 была функция SHGetMalloc, которая возвращала менеджер памяти по умолчанию. Именно так и работает код: получает менеджер памяти, а потом вызывает уже его функции. В Windows 2000 решили, что это дело можно упростить, и ввели функции-обёртки CoTaskMemAlloc и CoTaskMemFree, которые просто вызывают соответствующую функцию у менеджера памяти по умолчанию. Ну т.е. на псевдокоде: Код: pascal 1. 2. 3. 4. 5.
Таким образом, начиная с Windows 2000 можно вызывать CoTaskMemAlloc и/или CoTaskMemFree и это будет эквивалентно SHGetMalloc + вызов методов полученного менеджера памяти. Разницы при этом не будет никакой. да, это понятно. Оказалось что на машинах клиентов некоторые версии shell32.dll перестали экспортировать SHGetMalloc и лезли ошибки при попытке их вызвать, потому и озаботились их заменой на вышеуказанные. При замене хотелоь только удостовериться что не возникло утечек. Но я так понимаю проверить тут на утечки по простому не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 18:35 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
s62 SHGetFolderPath тоже устарелая (deprecated) и надо пользоваться SHGetKnownFolderPath. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 18:42 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
Мимопроходящий s62 SHGetFolderPath тоже устарелая (deprecated) и надо пользоваться SHGetKnownFolderPath. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 21:18 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
bk0010, Deprecated - не значит, что оно не работает. Куча функций АПИ завернуто на новые рельсы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 00:20 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
bk0010 Мимопроходящий пропущено... вот же ж п#дарасы! Козлы, ага. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 00:24 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun Оказалось что на машинах клиентов некоторые версии shell32.dll перестали экспортировать SHGetMalloc ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 07:25 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
Aniskin hlopotun Оказалось что на машинах клиентов некоторые версии shell32.dll перестали экспортировать SHGetMalloc на клиентскох машинах открывали PE Viewer и смотрели список экспортируемых а в программах список импортируемых функций. Так и выявили что импортируются несушествующие в экспорте (по крайней мере из shell32.dll) функции. Можно конечно попробовать восстановить картинку с версиями итп но какой смысл? Надо было просто заменить deprecated и удалённые функции на новые. Сейчас посадили практиканта для проверки остальных модулей на подобные проблемы. Поскольку продукту более 25 лет с кучей модулей, функций таких должно быть немало. У меня нет сейчас под руками конкретно в какой винде и версии библиотек проблема выявлена, возможно в кокойто серверной. По сути это неважно. Проверил сейчас на своей машине, везде есть. Возможно проблема была в каком то промежуточном обновлении, потом вспохватились и поправили. х.з. но то что deprecated надо убирать это факт. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 10:32 |
|
Shell32.dll и deprecated SHGetSpecialFolderLocation и SHGetMalloc
|
|||
---|---|---|---|
#18+
hlopotun Aniskin пропущено... Подскажи, а в каких конкретно виндах SHGetMalloc исчезла из экспорта shell32.dll? Я смотрю Windows 10 - на месте. Смотрю Windows 11 - тоже на месте. Или твои клиенты используют Windows 15? на клиентскох машинах открывали PE Viewer и смотрели список экспортируемых а в программах список импортируемых функций. Так и выявили что импортируются несушествующие в экспорте (по крайней мере из shell32.dll) функции. Можно конечно попробовать восстановить картинку с версиями итп но какой смысл? Надо было просто заменить deprecated и удалённые функции на новые. Сейчас посадили практиканта для проверки остальных модулей на подобные проблемы. Поскольку продукту более 25 лет с кучей модулей, функций таких должно быть немало. У меня нет сейчас под руками конкретно в какой винде и версии библиотек проблема выявлена, возможно в кокойто серверной. По сути это неважно. Проверил сейчас на своей машине, везде есть. Возможно проблема была в каком то промежуточном обновлении, потом вспохватились и поправили. х.з. но то что deprecated надо убирать это факт. Вот пиздаболище-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:47 |
|
|
start [/forum/topic.php?fid=58&msg=40132976&tid=2036647]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 433ms |
0 / 0 |