Я давно хотел "подружить"
ООП и MASM32. Вот в прошлом месяце было свободное время и я создал свою
модель ООП в масме. Она еще находится в стадии разработки, но уже работает и ею
уже можно пользоваться.
Посмотрите пример работы с классом тултипа. Думаю там все понятно, но вот вкратце,
как работать с объектами
в MASM32.
1) Класс существует в виде двух файлов - *.lib, *.inc. Их необходимо подключить
к программе с помощью
директив include и includelib соответственно. Также необходимо подключить файл
oop.inc, в котором содержатся
необходимые макросы.
2) Объект сначала надо создать из класса. Для это существует макрос CreateObject,
который принимает два
аргумента: первый - имя объекта, второй - имя класса. Например:
CreateObject man, CMan
Из одного класса можно создать неограниченное количество объектов (сколько память
позволит). Естественно,
данные одного объекта отделены от данных другого объекта этого класса.
3) После этого можно пользоваться свойствами, методами и событиями объекта. Свойство
устанавливается
макросом set, читается макросом get или @get. Например:
set man.Age, 25
set man.Name, CTEXT("Ivan") ;CTEXT - тоже макрос, находится в oop.inc
set man.Married, TRUE
mov eax, @get(man.Age)
get man.Name ;get возвращает значение свойства в eax
mov pName, eax
Для вызова методов предназначен макрос mcall:
mcall man.GoToHome
mcall man.Eat, Bread
Для обработки событий, надо указать объекту адрес обработчика события с помощью
макроса event:
event man.Say, offset Say
Обработчик Say мог бы выглядеть так:
Say proc szText: dword
invoke MessageBox, NULL, szText, CTEXT("Our man is saying!"), MB_OK
ret
Say endp
4) Уничтожается объект макросом DestroyObject по аналогии с CreateObject:
DestroyObject man, CMan
Зачем все это нужно? А зачем вообще нужно ООП? Во-первых, код становится reusable.
То есть можно было бы
создать пару сотен стандартных классов для программирования на масме под винду:
контролы, работа с
графикой и мультимедиа и т.д. Во-вторых, код становится легко поддерживать. Заметьте,
что несмотря на
ограниченность моего подхода, он успешно выполняет одну из главных задач ООП:
объекты ведут себя, как
объекты реального мира. Это значительно облегчает понимание и поддержку кода.
Из моих ближайших планов:
1) написать утилиту "MASM32 Class Editor" для автоматизации процесса
создания классов.
2) приступить к созданию библиотеки классов.
3) доработать модель ООП.
Если кто-нибудь хочет присоединиться к пунктам 2 и 3, милости прошу.
-------------------------------------------------------------
Regards,
vkim
ICQ 121690463