Как вызвать API функцию по индексу?

Тема в разделе "WASM.BEGINNERS", создана пользователем RiPPER, 15 мар 2006.

Статус темы:
Закрыта.
  1. RiPPER

    RiPPER New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2006
    Сообщения:
    5
    Сразу не пинайте... просто не смог нигде найти информацию как можно заюзать функцию из Shell32.dll, зная только её индекс. Укажите куда капать.



    ЗЫ

    На делфи эта функция объявляется так:

    procedure ExitWindowsDialog(ParentWnd: integer); stdcall; external 'Shell32.dll' index 60;

    Как её объявить в masm32
     
  2. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Причём здесь индекс? :dntknw:)



    Если этой функции ExitWindowsDialog в твоём Shell32.inc нет, то добавь её прототип в Shell32.inc:



    ExitWindowsDialog PROTO :lol: WORD



    Потом запускай BLDLIBS.BAT, который находится там же где и Shell32.inc.



    Он тебе создаст новую Shell32.lib, в которой будет добавлена эта функция.



    В проекте на masm32 пиши:



    include Shell32.inc

    includelib Shell32.lib



    Вот и всё :))))))))))))))))))))))
     
  3. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    RiPPER

    Если ничего не получится, то делай так ЗЕЛЁНЫЙ:



    ;----------------------------------------------



    TExitWindowsDialog typedef PROTO :lol: WORD



    .DATA?

    hShell32 DWORD ?

    ExitWindowsDialog TExitWindowsDialog ?

    ParentWnd DWORD ?



    .CODE



    ;...



    invoke LoadLibrary, TEXT("SHELL32.DLL")

    mov hShell32, eax

    invoke GetProcAddress, hShell32, 60

    mov ExitWindowsDialog, eax



    ;...



    invoke ExitWindowsDialog, ParentWnd



    ;...



    invoke FreeLibrary, hShell32



    ;----------------------------------------------



    PS: Простите, что без аттача...
     
  4. RiPPER

    RiPPER New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2006
    Сообщения:
    5
    Второй вариант не подходит по определённым причинам.

    А вот как в shell32.inc прописать именно ту самую функцию номер 60, которая идёт без названия (не документированная)?

    ExitWindowsDialog PROTO :lol: WORD эта строчка же не указывает на конкретную API функцию... Или я чего-то совсем не понял.

    Может мануал по этой теме есть? Ткните носом пожалуйста!

    А по поводу "procedure ExitWindowsDialog(ParentWnd: integer); stdcall; external 'Shell32.dll' index 60;" её такой строчкой можно обявлять в делфе для последующего использования в программе. У этой функции нет названия, она экспортируется по номеру (60)... Вот я теперь теряюсь в догадках как её можно прописать в shell32.inc.

    Делфи после такого обявления нормально её подцепляет из shell32.dll и нормально в табличку импорта заносит.
     
  5. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Действительно не объявлена :dntknw:



    Ordinal/Name

    58 RestartDialog

    59 ?

    60 ?

    61 PickIconDlg



    Я вызывал (см. выше) invoke ExitWindowsDialog, NULL она показывает диалог завершения Windows.
     
  6. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Мдяяяяя, может кто другой посоветует :)

    Вот всё, что я могу тебе RiPPER предложить...





    [​IMG] 1123090999__DEMO.RAR
     
  7. RiPPER

    RiPPER New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2006
    Сообщения:
    5
    Спасибо! Буду кавыряться дальше.
     
Статус темы:
Закрыта.