Как в асме вызвать SetWorkingDirectory при создании ярлыка (IShellLink)
;[ebp-04h] -> SetPath(dword ptr [ebp+0Ch]) ;устанавливаем адрес объекта
push dword[ebp+0Ch]
mov eax,[ebp-04h]
push eax
mov eax,[eax]
call dword[eax+50h]
Используется некое неизвестно откуда берущееся смещение +50h. А мне теперь нужно подобное смещение для SetWorkingDirectory.. Или какой-то другой способ вызова этой функции.
А смещение для SetWorkingDirectory = 24h.
Вообще, это не очень хорошая идея — использовать COM на асме. Знаю лишь, что для DX8 были заголовочные файлы, в которых реализовали доступ к интерфейсам DX. Для IShellLink не знаю, есть ли такое.
продублировано на официальном сайте.
Вообще-то об этом написано в прилагаемой к FASM справке и
The interface macro allows to declare the interface of the COM object type, the first parameter is the name of interface, and then the consecutive names of the methods should follow, like in this example:
interface ITaskBarList,\
QueryInterface,\
AddRef,\
Release,\
HrInit,\
AddTab,\
DeleteTab,\
ActivateTab,\
SetActiveAlt
interface ITaskBarList,\
QueryInterface,\
AddRef,\
Release,\
HrInit,\
AddTab,\
DeleteTab,\
ActivateTab,\
SetActiveAlt
То есть, предлагается брать заголовочники на Си или модули на Паскале, подглядывать в них и писать себе такое же, но на ассемблере, ибо настоящие мужчины сами пишут себе заголовочные файлы под ОС.
FASM вообще отличный инструмент, советую детальней изучить его возможности.
Да я и так его изучаю. Под винду, правда не все фишки знаю. Под Колибри больше знаю. Вот, например, с COM впервые толкнулся. А в инклудниках Си я искал уже. Пока не нашёл.