在调用API函数的时候,函数原型也必须预先声明,否则,编译器会不认这个函数。invoke伪指令也无法检查参数个数。声明函数的格式是:
函数名 proto [距离] [语言] [参数1]:数据类型,[参数2]:数据类型,……
句中的proto是函数声明的伪指令,距离可以是NEAR,FAR,NEAR16,NEAR32,FAR16或FAR32,Win32中只有一个平坦的段,无所谓距离,所以在定义时是忽略的;语言类型就是 .model那些类型,如果忽略,则使用 .model定义的默认值。
后面就是参数的列表了,对Win32汇编来说只存在dword类型的参数,所以所有参数的数据类型永远是dword,另外对于编译器来说,它只关心参数的数量,参数的名称在这里是“无用”的,仅是为了可读性而设置的,可以省略掉,所以下面两句消息框函数的定义实际上是一样的:
MessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword
MessageBox Proto :dword,:dword,:dword,:dword
发现一个问题
_MyNtOpenProcess typedef proto ProcessHandle:dword,DesiredAccess:dword,ObjectAttributes:dword,ClientId:dword
是可以的 但是
MyNtOpenProcess typedef proto ProcessHandle:dword,DesiredAccess:dword,ObjectAttributes:dword,ClientId:dword
貌似是不行的
2060

被折叠的 条评论
为什么被折叠?



