Как вызвать указатель на функцию в MASM - PullRequest
1 голос
/ 20 сентября 2011

Итак, я пытаюсь вызвать указатель на функцию, но у меня ничего не получается.Может ли кто-нибудь помочь, пожалуйста?

Я храню указатель функции следующим образом:

mov pFunction,offset Function

Я действительно могу заставить вызов работать следующим образом:

call pFunction

Но когда я пытаюсь это сделать:

invoke pFunction

я получаю "ошибку A2190: INVOKE требуется прототип для процедуры".

И если я пытаюсь это сделать:

invoke Function pFunction

Я получаю «ошибка A2206: отсутствует оператор в выражении».

Есть идеи?

PS: вот весь список:

.386
.model flat,stdcall
    option      casemap: none
    include     d:\masm32\include\windows.inc
    include     d:\masm32\include\kernel32.inc
    includelib  d:\masm32\lib\kernel32.lib

    Function proto
.data?
    pFunction   dd      ?
.code
start:
    mov pFunction,offset Function
    invoke  pFunction

    push    0
    call    ExitProcess

Function proc
    ret
Function endp
end start

1 Ответ

0 голосов
/ 21 сентября 2011

Я только что нашел ответ здесь

http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_07.htm

Вот что вам нужно сделать:

.386
.model flat,stdcall
    option      casemap: none
    include     d:\masm32\include\windows.inc
    include     d:\masm32\include\kernel32.inc
    includelib  d:\masm32\lib\kernel32.lib

    FUNCPROTO       TYPEDEF PROTO 
    FUNCPTR         TYPEDEF PTR FUNCPROTO
.data?
    pFunction   FUNCPTR     ?
.code
start:
    mov pFunction,offset Function
    invoke FUNCPTR ptr pFunction

    push    0
    call    ExitProcess

Function proc
    ret
Function endp
end start
...