게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
상속 구현으로 고민하다 일단 대충 마무리 했습니다.
게시물ID : programmer_12735짧은주소 복사하기
작성자 : 중용자
추천 : 0
조회수 : 540회
댓글수 : 8개
등록시간 : 2015/08/15 00:28:22
사실 어셈블리에서 객체 지향 구현은 생각보다 훨씬 쉽습니다.
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
출처 본인
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호