사실 어셈블리에서 객체 지향 구현은 생각보다 훨씬 쉽습니다.
Java, C++의 객체지향을 구현하는 건 생각보다 구조적으로 매우 간단합니다.
문제는 객체지향의 모든 특징을 지원하면 클래스 사용시 C보다도 못한 속도가 나올 수 있다는 점이죠.
그래서 성능 저하를 일으키지 않는 상태에서 최대한 상속을 지원하기 위해 여러 방법들을 시도하다 결국 클래스의 변수는 상속되고 함수는 상속되지 않는 방식으로 구현하고 마무리 지었습니다.
Visual Basic의 Me를 지원하여 클래스 내에서는 Me를 이용해 함수와 변수를 사용할 수 있게 했구요.
아래는 Class를 적용한 템플릿 앱 소스입니다.
윈도우를 생성하기 위해서는 Forms 클래스를 상속받아야 하는 구조입니다.
보통 어셈블리로 빈 윈도우를 생성하면 2KB의 실행파일이 생성되는데 클래스를 지원한 덕분에 최소 파일의 크기가 2.5KB로 커졌습니다.
중간에 Properties가 있어 길어 보이는데 Properties는 비주얼 스튜디오 보면 폼 디자인할때 왼쪽의 프라퍼티창의 항목과 동일한 항목으로 폼을 설정할 수 있게 만든것으로 IDE가 개발되면 비주얼 스튜디오 방식으로 폼을 디자인할 때 자동으로 변경될 항목입니다.
클래스 내의 WndProc함수 또한 IDE가 개발되면 직접 입력할 필요없이 비주얼 스튜디오 방식으로 자동으로 생성되게 할 생각입니다.
include "%FastASM%\Init.inc"
;___________________________________________________________________________________________________
include "%FastASM%\FastASM.inc"
include "MainForm.inc"
;___________________________________________________________________________________________________
include "%FastASM%\FastASM.asm"
include "MainForm.asm"
;___________________________________________________________________________________________________
Main
Dimension
Dim .form As MainForm
EndDim
Get .form(0) = New MainForm
Form.Show .form(0)
Application.Run
Finalize .form(0)
EndMain
Properties MainForm
; Appearance
.BackColor = SystemColors.Window
.Cursor = Cursors.Default
.FormBorderStyle= Forms.FormBorderStyle.Sizable
.Text String "FastASM Studio"
; Behavior
.DoubleBuffered = False
.Enabled = True
; Design
.Name String "FastASMStudio"
; Layout
.X = CW_USEDEFAULT
.Y = CW_USEDEFAULT
.Width = CW_USEDEFAULT
.Height = CW_USEDEFAULT
; Window style
.ControlBox = True
.Icon = SystemIcons.Application
.MainMenuStrip = NULL
.MaximizeBox = True
.MinimizeBox = True
EndProperties
Class MainForm, Forms
Method Destroy
EndClass
Class MainForm
Sub WndProc, .hWnd, .uMsg, .wParam, .lParam
BEGIN_MSG_MAP
ON_DESTROY
END_MSG_MAP
EndSub
Sub Destroy
Application.Exit
EndSub
EndClass