![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() |
gMan |
![]() ![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Допустим нарисовал я кнопку. И еще, еще...
А как сделать эту обьектно-орентированность (блин, слово то какое) не пойму! ![]() Может кто обьяснит? -------------------- Стабильность - признак мастерства
|
![]() ![]() |
BlackShadow |
![]()
Сообщение
#2
|
Гость ![]() |
![]() Например создаёшь объект типа Type Но это глупо. Вот, если сделать какой-то базовый объект типа Type В которм ничего не рисуется, но все твои кнопки, едиты и т. д. и т. п. наследуются от него и перекрывают Paint, то это уже будет на что-то похоже. А кастовать примерно так: Var ... образно говоря. |
gMan |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Хм... На паскале то понятно.
А с ассемблером как быть? ![]() -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#4
|
Гость ![]() |
Ну ты загнул. Было у меня дело - писал на асме с ООП, но по памяти не скажу. Посмотрю дома в поннедельник обязательно вышлю. У меня под IDEAL...
|
gMan |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Отлично! жду!
Заранее спасибо. -------------------- Стабильность - признак мастерства
|
gMan |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Уже ведь вторник, а обещанного нет. :p2:
-------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#7
|
Гость ![]() |
Я уже извинился в другом топике - запамятовал (выходные бурные были
![]() |
gMan |
![]()
Сообщение
#8
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Ждемс...
![]() -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#9
|
Гость ![]() |
Ндя. Особо порадовать нечем. Оказывается поприбивал я всё, что делал под ООП, а книгу спихнул кому-то
![]() SEGMENT VMT_Seg PUBLIC Чего тут есть: 1). Описывается VMT_Seg. В этом сегменте и будут храниться все VMT. 2). Макрос LoadVMTSeg загружает в сегментный регистр адрес VMTSeg. 3). Тип MPTR описывает тип элементов VMT. Для маленьких моделей памяти можно заменить и на WORD, т. к. достаточно хранить лишь смещение метода. 4). Макрос MakeVMT является основным во всём этом бреде. Он и инициализирует таблицу VMT для объекта. Естественно должен вызываться в конструкторе. Теперь о воспоминаниях. Описывается класс как struc, но необычный. В нём может присутствовать такая вот форма:
Таким вот макаром объявляются методы. Ещё есть такой момент: конструктор лучше оформить как обычный метод, который вызывает MakeVMT, а затем уже какой-нибудь виртуальный метод инициализации. Вызывать методы лучше через CALL METHOD Obj.MyMethod. А вот тут точно не помню: это форма сама заносит this/self/me в ES:BX или это самому надо делать, чтобы VMT он нашёл... Ну, это можно и в дебугере уточнить. А вот как описывается наследование, вот этого я действительно не помню ![]() З. Ы. : забыл-то про самое главное. Виртуальные методы объявляются вроде так: VIRTUAL MyFun MPTR MyObj_MyFun Прикрепленные файлы |
gMan |
![]()
Сообщение
#10
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Спасибо, ты мне очень помог.
![]() -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#11
|
Гость ![]() |
Не на чем. Если напишешь чего рабочего, выложи, PLZ, кусок кода, чтоб память освежить... А то неправильно как-то: писал, писал, а тут раз и всё забыл...
|
gMan |
![]()
Сообщение
#12
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Нет проблем, как напишу - так покажу
![]() P.S. Если что нть сам вспомнишь выложи. Сообщение отредактировано: TheLizard - 29.07.2004 14:08 -------------------- Стабильность - признак мастерства
|
gMan |
![]()
Сообщение
#13
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
BlackShadow, что если я напишу модуль компонентов на пасе, смогу ли я использовать потом эти компоненты в своей ос на асме, в граф.режиме. Если да, то как вызывать процедуры из паскалевского модуля?
Сообщение отредактировано: TheLizard - 31.07.2004 17:09 -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#14
|
Гость ![]() |
Давай-ка лучше заново и по-подробнее. Я что-то не особо въехал. Ты спрашиваешь, как использовать процедуру написанную на ASM в паскале? {$L ...) и понеслось. Это ты должен знать. Если наоборот, то EXTERN ...:PROC и поехали.
А если тебе надо из ассемблерного кода поработать с паскалевскими объектами, то это уже другое дело. Рекомендую так: создаёшь класс TObject такого типа: Type После этого надо заюыть про то, что Dispose сожно вызывать и самому, а пользоваться только Free. А САМОЕ важное - ВСЕ классы должны наследоваться от такого вот TObject. Чего мы этим добились? Мы знаем где находится адрес VMT в объектах и можем их спокойно создавать, кастовать и убивать:). Чтобы создать объект: {Creating static object} Что примечательно, последний вариант сам вызовет new и т. д., а так же вернёт тебе поинтёр на инстанс. Чтобы вызвать какой-то динамический метод: MOV BX,[WORD PTR InstanceOfMyObject] {Get Offset Of VMT} Надо заметить, что Method #0 - Destructor. Чтобы кильнуть: PUSH SEG MyObj оно и память освободить и деструктор вызовет. Вот только я в душе не знаю во что превращаются имена статических методов объектов при компиляции, а так же имена конструкторов... ![]() |
gMan |
![]()
Сообщение
#15
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Спасибо, далее сам догоню
![]() Уже что то назревает... Мне не даёт покоя вопрос:"Стоить ли вообще использовать Паскаль? Или все делать на чистом асме?" ![]() На паскале я бы написал ООП и на асме тоже. Но на пасе вроде удобней и наглядней, хотя ОСь написана на Асме. Как то сам не знаю, что хочу ![]() Допустим все компоненты бубут на асме, то как сделать так чтобы их могли использовать другие, но не видели исх.код (библеотека короче). На паскале с этим проблем нет. И стоит ли запихивать компоненты в библиотеку(не библиотека она вовсе, а просто файл с процедурами) API функций? И вообще на каком языке лучше писать ОС? Сообщение отредактировано: TheLizard - 1.08.2004 17:31 -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#16
|
Гость ![]() |
А зачем тебе понадобился паскаль? Лень графику делать?
|
gMan |
![]()
Сообщение
#17
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Нет просто удобнее работать
![]() Так все таки лучше, вообше паскаль не трогать? P.S. Посмотри моё пред последнее сообщение, оно было отредактировано до того как я увидел твоё сообщение. -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#18
|
Гость ![]() |
Да хоть на басике пиши
![]() Чем паскаль удобнее асма? Цитата Допустим все компоненты бубут на асме, то как сделать так чтобы их могли использовать другие, но не видели исх.код (библеотека короче). На паскале с этим проблем нет. И стоит ли запихивать компоненты в библиотеку(не библиотека она вовсе, а просто файл с процедурами) API функций? Вообще нифига не понял. |
gMan |
![]()
Сообщение
#19
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
Бррр...
Короче на чистом асме писать буду и точка ![]() Теперь все заново и попорядку: Как писать компоненты? Я имею ввиду, стоит ли делать каждый компонент отдельным файлом или все их запихать в один общий файл, а может вообще всё в библиотеку API функций. -------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#20
|
Гость ![]() |
1). А что ты подразумеваешь под компонентом?
2). Как тее удобней. Мне бы было проще распихать их по файлам, а линковать вместе. 3). Ты сначала определись как ты свои API экспортировать будешь. |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 13:47 |