· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› функция SHObjectProperties

Посл.отвђт Сообщенiе


Дата: Июн 2, 2004 14:09:20 · Поправил: 1990

Здравствуйте!

Интересная получается ситуация - описание функции есть,
а её саму найти не могу.
Дело в том, что ещё не так давно я поднимал вопрос о
возможности вызова свойств у "Корзины". Toxic ответил
мне и привёл такой пример:
invoke SHObjectProperties, hWndOwner, 2, szObjectPath, szTabName 

В тот момент у меня несколько изменились задачи и разбираться
с функцией я не стал. Сейчас снова понадобилась эта функция и я полез в MSND за описанием. Описание нашёл, Import library - Shell32.dll. Но в Windows 2000 Professional SP 3 в shell32.dll функции не оказалось - мистика ;-) На другом сайте прочёл, чтоверсия библиотеки должна быть 5.0, а в w2k SP3 - 5.0.3502.5436
Что делать? Может быть, я просто что-то напутал, но и в случае
использования LoadLibrary/GetProcAddress тоже ничего не
находиться.
Подскажите пожалуйста, какой-нибудь выход!

PS. А как вызывать функции по их ординалу? Может быть это просто
LoadLibrary/GetProc...

Заранее благодарен!
1990.


Дата: Июн 2, 2004 19:24:15

Символ опредлен в Shell32.Lib. Не вижу каких-то проблем.
Что до ординалов - в упаковщиках первой части написано. Надо макрос использовать. Там все показано.


Дата: Июн 2, 2004 20:35:33

volodya
Может быть в последней версии пакета MASM? У меня - нет.
Может быть возможно мне в атаче положить shell32.lib+inc?
Просто возможности скачать весь МАСМ32 нет.
Спасибо! В статье поищу ответ на вопрос по вызову по ординалу.


Дата: Июн 2, 2004 20:43:39

Перед тем, как аттачить, ты уверен, что с LoadLibrary/GetProcAddress ты в пролете?


Дата: Июн 3, 2004 10:47:20

volodya
Насколько могу - уверен. Приаттач, пожалуйста!


Дата: Июн 3, 2004 11:53:40
Правка

1990
Ты прав. Отчасти.

Дело в том, что SHObjectProperties вызывается по ординалу 178. Если получать адрес функции через GetProcAddress по имени, то, естесственно, эта функция не будет найдена, что и покажет отладчик.

Использовать импорт как обычно тоже не получается и вот почему.
В MASM32 эта функция не определена в заголовочном файле (shell32.inc) надо это сделать вручную (никаких проблем). Но так как файлы библиотечных модулей (.lib) строятся на основе заголовочных (утилитой inc2l), то и в shell32.lib эта функция не определена и компоновщик отказывается собирать приложение.

В общем, выходов несколько:

  • определить вручную нужную функцию в shell32.inc и построить снова shell32.lib упомянутой утилитой
  • взять shell32.lib из PlatformSDK и добавить функцию в shell32.inc
  • использовать GetProcAddress, но я, например, не знаю, где искать нужные ординалы.


Shell32.lib в аттаче…

_1520059719__Shell32.rar


Дата: Июн 3, 2004 11:57:55 · Поправил: IceStudent
Правка

1990
И ещё.
Просто возможности скачать весь МАСМ32 нет.
Не обязательно ради одного файла качать MASM32 или PlatformSDK. Используй, например, вот это


Дата: Июн 3, 2004 15:43:41

IceStudent
Большое спасибо за детальное описание и аттач!


Дата: Июн 6, 2004 05:11:07

что версия библиотеки должна быть 5.0, а в w2k SP3 - 5.0.3502.5436 Что делать?
Ты же MSDN читал.
Minimum DLL Version: shell32.dll version 5.0 or later
Minimum operating systems: Windows 2000


Дата: Июн 6, 2004 05:28:54

А вообще оно и в 98-й винде без проблем работает.
И, кажется, даже в 95-й(сейчас уже не припомню).


Дата: Июн 6, 2004 05:41:27

1990
Да, ты ж не забудь, что документированная версия(5.0 и выше) принимает Unicode-строки, а недокументированная - ASCII.


Дата: Июн 6, 2004 10:41:59

Toxic
Спасибо! Я сейчас ещё несколько недокументированных функций нашёл в shell32.dll.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065