自创的用MASM宏实现OOP的方式

太晚了,注释我明天一定补上,大家有什么好建议尽可能留言,ASM不死!!!

文件oop.inc

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++define class symbol first++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
;==============================a class here will be defined==============================;
;                              class jeffclass
;       localvar1 dd ?
;       localvar2 dd ?
;       ......
;       METHOD function1,param1,param2,parm3...paramn
;       METHOD function2,param1,param2...paramk
;       ......
;      jeffclass endc
class TEXTEQU <CLASS>
endc  TEXTEQU <ENDC>
method TEXTEQU <METHOD>
member TEXTEQU <MEMBER>
override TEXTEQU <OVERRIDE>
new TEXTEQU <NEW>
getclass TEXTEQU <GETCLASS>
releaseclass TEXTEQU <RELEASECLASS>
virtual TEXTEQU <VIRTUAL>
exert TEXTEQU <EXERT>
getaddr TEXTEQU <GETADDR>

ENDC  TEXTEQU <ENDS>
MEMBER TEXTEQU <DD>;usage member1 MEMBER 0

CLASS MACRO _name:REQ,_parent
 _proto CATSTR <_name>,< STRUCT>
 _proto
ENDM

METHOD MACRO function:REQ,params:VARARG
 local funcPtr,func,def,_params,COUNT
 _params TEXTEQU <>
 COUNT=0
 FOR __params,<params>
  _params CATSTR _params,<__params>,<:dword,>
  COUNT=COUNT+@SizeStr(__params)+7
 ENDM
 COUNT=COUNT-1
 IFNB _params
  _params SUBSTR _params,1,COUNT
 ENDIF
 func CATSTR <function>,<_proto typedef proto >,<_params>
 func
 funcPtr CATSTR <function>,<_ptr>,< typedef ptr >,<function>,<_proto>
 funcPtr
 def CATSTR <function>,< function>,<_ptr>,< ?>
 def
ENDM
;================================GETADDR GET A ADDRESS FROM THE CLASS=============================================;
GETADDR MACRO MEMBER:REQ
 LOCAL CONTENT
 CONTENT CATSTR <[EBX].>,<MEMBER>
 LEA EDI,CONTENT
ENDM
;================================OVERRIDE ASSUMES THAT EBX HAS THE CLASS'S POINTER================================;
OVERRIDE MACRO methodName:REQ,lpFunc:REQ
 local vFunc
 vFunc CATSTR <methodName>
 mov [EBX].vFunc,lpFunc
ENDM

VIRTUAL MACRO funcName:REQ
 funcName dd ?
ENDM
;================================EXERT DO VIRTAL FUNCTION CALLING================================;
REVERSE MACRO params:VARARG
 local vargs,COUNT
 vargs TEXTEQU <>
 COUNT=0
 ;do reverse
 FOR var,<params>
  vargs CATSTR <var>,<,>,vargs
 ENDM
 IFNB vargs
  vargs SUBSTR vargs,1,@SizeStr(%vargs)-1
 ENDIF
 EXITM vargs
ENDM
EXERT MACRO funcName:REQ,params:VARARG
 local vargs
 vargs TEXTEQU REVERSE(params)
% FOR vvar,<vargs>
  push vvar
 ENDM
 call [ebx].funcName
ENDM
;================================GETCLASS ASSUMES THAT EBX RETUERNS================================;
GETCLASS MACRO className:REQ
 assume EBX:PTR className
ENDM

RELEASECLASS MACRO
 assume EBX:nothing
ENDM
;================================NEW MACRO RETURN NEW CLASS IN EAX================================;
NEW MACRO className:REQ,initParams:VARARG
 local COUNT,params,callInit,initFunc
 invoke GetProcessHeap
 invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,sizeof className
 COUNT=0
 params TEXTEQU <>
 FOR _params,<initParams>
  params CATSTR params,<_params>,<,>
  COUNT=COUNT+@SizeStr(_params)+1
 ENDM
 COUNT=COUNT-1
 IFNB params
  params SUBSTR params,1,COUNT
 ENDIF
 mov ebx,eax
 initFunc CATSTR <className>,<_init>
 mov dword ptr[eax],initFunc
 assume eax:ptr className
 callInit CATSTR <invoke >,<[eax].>,<className>,<_init>,<,>,<params>
 callInit
ENDM

DEL MACRO className:REQ,lpClass:REQ,releaseParams:VARARG
 local destructor,COUNT,params
 params TEXTEQU <> 
 COUNT=0
 destructor CATSTR <className>,<_release>
 invoke GetProcessHeap
 invoke HeapFree,eax,0,lpClass
 FOR _params,<releaseParams>
  params CATSTR params,<_params>,<,>
  COUNT=COUNT+@SizeStr(_params)+1
 ENDM
 COUNT=COUNT-1
 IFNB params
  params SUBSTR params,1,COUNT
 ENDIF
 % echo params
 IFNB params
  invoke destructor,params
 ELSE
  invoke destructor
 ENDIF
ENDM

INHERIT MACRO PARENT
 local _parent
 _parent db sizeof(PARENT)-4 DUP (0)
ENDM

;==============================STRING MACRO ASSUME THAT ESI RETURNS A STRING
STRINGA MACRO @STRING:REQ
 LOCAL TEMP,_NEXTPOS,NEXTPOS,_STRING
 _NEXTPOS CATSTR <N>,<TEMP>
 _STRING CATSTR <S>,<TEMP>
 NEXTPOS CATSTR _NEXTPOS,<:>
 JMP _NEXTPOS
 _STRING DB @STRING,0  
NEXTPOS
 _STRING CATSTR <OFFSET>,< >,_STRING
 EXITM _STRING
ENDM

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值