Использование MASM32 INVOKE

Тема в разделе "WASM.ASSEMBLER", создана пользователем psu, 22 ноя 2006.

  1. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Хочу использовать invoke вместо call, но проблема в том, что функция вызывается по адресу в переменной, то есть

    proc_addr dd ?
    ...
    invoke proc_addr, ...

    Компилятор матерится: INVOKE requires prototype for procedure
    Можно ли решить такую проблему?
     
  2. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Код (Text):
    1. MACRO my_invoke proc_addr param1, param2.... paramN
    2.  
    3. push paramN
    4. push..........
    5. push param2
    6. push param1
    7. call proc_addr
    8.  
    9. ENDM
    ))))))
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    psu
    ну если требует попробуй объявить прототип для начала
     
  4. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Asterix

    Дык как ему прототип объявить, если адрес процедуры - в переменной ;)?
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    CT

    ну логично сначала попробовать объявить, чтоб потом прийти к выводу
    о необходимости написания своего макроса invoke
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    psu
    Статьи на сайте. Навскидку - статьи про СОМ и KmdTut.
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Действительно задача не столь тривиальна как кажется на первый взгляд :)
    Загляни в DirectX sdk, там в инклюдах есть решение, да и так оно пригодится :)
     
  8. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    569
    Как используя invoke вызывать дальние процедуры, точней extern, и чтобы можно было задать прототип для контроля параметров?
    Короче, чтобы вызывался call ds:name_proc
    --- Сообщение объединено, 2 июн 2024 ---
    Короче, решил высокоуровнево вызывать процедуры точней методы, просто макросами. Так проще и код лучше контролируешь, макрос понимает префикс адреса &, префикс ^ явное преобразования в float и "" строки помещает в .const
    Хотя UASM это должен делать, но что-то пошло не так.