|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 23, 2003 21:58:21 Edmond Sorry, в callback это дело тоже может вызвать исключение. Просто в моём примере исключение почемуто не происходит, но вообще EDI нужно сохранять и в callback, и в тредах. Получается, что главная ф-ция треда - это тоже callback? |
|
|
Дата: Сен 23, 2003 22:43:36 boozook Т.е. как я понял, отказаться от соглашений в C и передавать this не через стек, а в регистре ... Микрософт уже давно от них отказался. Хотя this и помещается в стек но методы предпологают что this им передан через регистр ecx и не загружают его из стека. И такие штуки очень раздражают когда пытаешся сделать ассемблерную вставку. |
|
|
Дата: Сен 24, 2003 00:19:45 Black_mirror Хм.. Видимо библиотеки выпускаются по старому, coinvoke же так и работает без копии в ecx... |
|
|
Дата: Сен 24, 2003 12:23:20 Edmond Вот она же на ASM my_function proc push ebp mov ebp,esp this EQU dword ptr [ebp+8] ;; Указатель на структуру ;; класса param1 EQU dword ptr [ebp+12] param2 EQU dword ptr [ebp+16] my_function endp т.е. я так понял нужно делать указатьль на структуру и потом уже до переменных private: i или j добираться как смещение? т.е. если у нас this EQU dword ptr [ebp+8] то i= THIS+4, а j= THIS+8!!! Я так понял? |
|
|
Дата: Сен 24, 2003 13:42:20 Quantum useEDI PROC inc edi ret useEDI ENDP Всё!!! РРРРРРРРРРРРРРРРРРРР Объясняю подробно. 1. Если у вас есть метод класса. 2. И вы договорились, что метод принимает this = ebx (У меня кстати есть такое как EXTCALL) 3. То вы можете ВСЕГДА вызывать этот объект ТАКИМ ОБРАЗОМ. Вопросы?____ Понятно и ЯЖУ, что если Ваша функция вызвана по STDCALL то она должна сохранить ebx.... А что здесь такого? Но ведь функция-метод не должна этого делать. (или должна в отличии от конвенции). Что здесь было сложно/непонятно? |
|
|
Дата: Сен 24, 2003 13:47:31 т.е. я так понял нужно делать указатьль на структуру и потом уже до переменных private: i или j добираться как смещение? т.е. если у нас this EQU dword ptr [ebp+8] то i= THIS+4, а j= THIS+8!!! Я так понял? Ну конечно. (Всё, кидаю всё.. и пишу статью о ООП.. Ужассс!!!! Это же просто ужасс. :)))) |
|
|
Дата: Сен 24, 2003 14:13:28 Edmond в какой книге про это все написано!!!??? Интересно тоже если будет КЛАСС на С написан а ФУНКЦИЯ ЧЛЕН в отдельном файле на асме!!!! Это очень интересно!! |
|
|
Дата: Сен 24, 2003 14:33:14 emergenter в какой книге про это все написано!!!??? В моей :)))) видимо :))) Это написано в голове.. когда понимаешь что такое ООП. Это очень интересно!! Да будет СВЕТ!!! |
|
|
Дата: Сен 24, 2003 15:03:12 БЛИН!!! ХОЧУ ЧИТАТЬ ТВОЮ КНИГУ КАК МОЖНО СКОРЕЕ!!! Когда статья появится??? |
|
|
Дата: Сен 24, 2003 15:12:40 Edmond Если можешь растолкую подробно!!! Я хочу врубиться в эту тему!!! Пожалуйста |
|
|
Дата: Сен 24, 2003 15:23:13 emergenter Эхх, работу что ли бросить? :)))) |
|
|
Дата: Сен 24, 2003 15:31:38 emergenter Если ты хочешь разобратся сам, то посмотри топик, в котором я оставил объяснение сути ООП. Он тут где-то. Там мол пример с FAT |
|
|
Дата: Сен 24, 2003 15:41:13 |
|
|
Дата: Сен 24, 2003 21:21:50 Edmond Надеюсь, следующий пример прояснит ситуацию:
На асме это будет выглядеть примерно так: SET_THIS myObject, myClass METHOD myMethod1, args METHOD myMethod2, args METHOD myMethod3, args RELEASE_THISЧто делают макросы? push ebx ; SET_THIS mov ebx,myObject assume ebx:PTR myClass invoke ebx.myMethod1,ebx,args invoke ebx.myMethod2,ebx,args invoke ebx.myMethod3,ebx,args assume ebx:nothing pop ebx ; RELEASE_THISПримерно так работает OOP by NaN. Но ведь функция-метод не должна этого делать. Конечно нет. Но это должен знать макрос, который вызывает метод. Создаётся впечатление, что мы с вами зря спорим, защищая одну и туже идею OOP. Кстати, я в этой ветке ничего не спрашивал про OOP, а наоборот пытался ответить. С callback я уже разобрался экспериментальным путём. Кто-то кого-то неправильно понял... |
|
|
Дата: Сен 24, 2003 21:45:22 Quantum 'Получается, что главная ф-ция треда - это тоже callback?' --- Попал в самую точку! --- Любая функция адрес которой передаётся к Win32. (наважно как, через WNDCLASS или через параметр(ы)) должна сохранять EBX, ESI, EDI - В точности как это делает компилятор С для Win32. Функция треда - это один из таких случаев. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063 |