![]() |
|
Модераторы: Daevaorn Страницы: (8) Все « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
БОГ МОЙ! Гуру c++! Как по вашему указатель на метод класса соотносится с экземпляром класса, такой указатель как минимум должен содержать this и адрес самого метода в памяти.
Еще раз, указатель на метод класса, как минимум 8 байт, он может быть и 12 и 16 байт. Одно остается неизменным, то, что, такая вот конструкция *(DWORD *)&lpfun, вернет нам только, 4 байта - адрес самого метода, в случае если метод объявлен void, vod __fastcall, void __stdcall и тд и тп. С 64x разрядными системами я не работал, по этому демогогии не будет, хотя и для этого случая можно предусмотреть отдельный дефайн.
Так надо, говорю же, дефайн в крайнем случае добавить один, а так в принципе, можно и в этой форме попробывать. |
||||||
|
|||||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
этот код выведет:
как видишь можно вызвать любой код, и это не сломается при переносе на другую платформу Это сообщение отредактировал(а) Lazin - 8.9.2008, 09:38 |
||||
|
|||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Эта фраза (уволили) относилась к другому коду, не к последней реализации. А из конструктивного хочу знать, где именно зависимость от компилятора (BCB - VS)? У кого VS под рукой, проверьте! Это сообщение отредактировал(а) vaddsm - 7.9.2008, 17:43 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
то что ты описал относится не к указателю на метод, а к указателю на метод с модификатором __closure, тоесть это работает только с BCB для всех остальных компиляторов указатель на метод, это указатель на функцию, никакого this там не будет |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
__fastcall
|
|||
|
||||
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Макросы, тотже код, читать тяжело с непривычке. Так, что это субъективно.
Тут я жду как он себя на VS проявит, пока нет под рукой этого компилятора. Будет результат, тогда и поговорим.
Тут я стобой и спорить не буду, для меня тоже показатель. Но в данном случае код достаточно снабдить и комментом. Добавлено @ 17:51 Сейчас с VS разберемся. Добавлено @ 17:54 Lazin, тот код что ты привел, он какое отношение к задаче имеет? Я уже устал повторять, задача не в том чтобы с делигатами работать было удобно. Задача сделать удобный интерфейс для библиотеки, в той форме, в которой я изначально показал. Добавлено @ 17:56 ПОГОДИТЕ! а что VS не поддерживает конвенцию __fastcall???? Если поддерживает, в чем ваши притензии к коду? Это сообщение отредактировал(а) vaddsm - 7.9.2008, 17:57 |
||||||
|
|||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
в том, что он нерабочий жаль проверить нечем |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Lazin, у меня нет большого опыта, работы в VS среде, но ты берешся утверждать, что:
допустим, LPMF_CKINGFUNCTIONPTR - тип заведенный для хранения указателей на функцию член класса вида: void Function_ofF_RINGTYPE(void); тогда, LPMF_CKINGFUNCTIONPTR lpFun = (LPMF_CKINGFUNCTIONPTR)&SomeClass->Function_ofF_RINGTYPE; после этого lpFun не будет содержать никакой информаци о SomeClass???! Добавлено @ 18:14
У меня он работает при любых интересующих меня условиях, я его писал и проверял. Ты не проверял, но утверждаешь что он не рабочий. Говорить догмами по моему, это привилегия бога. Меня ооочень интересует конструктивная критика. Это сообщение отредактировал(а) vaddsm - 7.9.2008, 18:15 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
поддерживает, но не так как BCB
|
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Добрался до VS, сейчас доработаю.
Добавлено через 1 минуту и 7 секунд Ага, vinter, вот это я и называю конструктивно, спасибо! |
|||
|
||||
| Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
lpFun не будет содержать никакой информации об экземпляре SomeClass, мало того LPMF_CKINGFUNCTIONPTR lpFun = (LPMF_CKINGFUNCTIONPTR)&SomeClass->Function_ofF_RINGTYPE не скомпилируется если имелось ввиду вот это LPMF_CKINGFUNCTIONPTR lpFun = &SomeClass::Function_ofF_RINGTYPE; то вызывать lpFun нужно будет не так, как это делается в builder, для методов с __closure:
а так как это делают в С++:
конструктивная критика: щито такое __fastcall (); в теле класа?
|
||||||
|
|||||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Итак, я в отладчике )! Насчет ecx, ваша, правда. push ebp, mov ebp, esp, как я и писал, все тоже. Смотрим дальше...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
__fastcall это (компиляторозависимое) соглашение о вызове, указывающая компилятору, что некоторые из параметров будут будут переданы не через стек, а прямо через регистры Добавлено через 1 минуту и 8 секунд http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%...%BE%D0%B2%D0%B0 Это сообщение отредактировал(а) mes - 7.9.2008, 18:51 |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не не ен, он имеет ввиду, что значит
если я правильно понял. ясен пень, это стандарные дейстивия, необходимые для возврата из процедуры. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
оп я не на то ответил ) __fastcall () - насколько я понял это перегрузка оператора инициализации объекта в борланде. то есть new Class(); // <- вот тут вызывается.. Это сообщение отредактировал(а) mes - 7.9.2008, 19:12 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |