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

Discussion in 'WASM.ASSEMBLER' started by psu, Nov 22, 2006.

  1. psu

    psu New Member

    Blog Posts:
    0
    Joined:
    Jul 12, 2006
    Messages:
    198
    Хочу использовать invoke вместо call, но проблема в том, что функция вызывается по адресу в переменной, то есть

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

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

    CT New Member

    Blog Posts:
    0
    Joined:
    Oct 17, 2006
    Messages:
    72
    Code (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

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    psu
    ну если требует попробуй объявить прототип для начала
     
  4. CT

    CT New Member

    Blog Posts:
    0
    Joined:
    Oct 17, 2006
    Messages:
    72
    Asterix

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

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    CT

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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    psu
    Статьи на сайте. Навскидку - статьи про СОМ и KmdTut.
     
  7. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    Действительно задача не столь тривиальна как кажется на первый взгляд :)
    Загляни в DirectX sdk, там в инклюдах есть решение, да и так оно пригодится :)
     
  8. Intro

    Intro Active Member

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