1. Внимание!
    Объявились мошенники, которые представляются администрацией форума и обманывают покупателей. У них есть своя группа ВКонтакте, копирующая нашу, и несколько аккаунтов, маскирующихся под аккаунты администраторов и гарантов форума.
    При проведении любых сделок с администраторами, гарантами и пользователями BlastHack настойчиво требуйте у них написать вам личное сообщение на форуме и ни в коем случае не продолжайте сделку при отказе выполнять это требование или если сообщение не было получено.

Pascal/Delphi Как вызвать метод класса имея в распоряжении его поинтер?

Тема в разделе "Другое", создана пользователем monobogdan, 3 янв 2017.

  1. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Бля, я запутался.
    Я пишу на Delphi, соотвественно тут совершенно другое ООП.
    В теории, чтобы вызвать метод класса надо сложить поинтер заллокэйтенного класса + указатель на саму фнукцию в классе.
    Но бля, как я это сделаю если VC++ еще всякое дебаг говно сохраняет в бинарнике?
     
    #1
  2. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    В VC++ это гораздо проще было бы, достаточно объявить класс и присвоить ему поинтер.
     
    #2
  3. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    557
    Лайки:
    611
    Репутация:
    282
    Может ты уже перестанешь создавать темы для каждого вопроса и наконец откроешь для себя эту тему [http://blast.hk/threads/781/ ??

    А по сабжу надо передать функции указатель на обьект через регистр ecx
     
    #3
    Последнее редактирование: 3 янв 2017
  4. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Зачем asm вставки?
    Или имеется ввиду можно скопировать какой то кусок из IDA PRO?
     
    #4
  5. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    557
    Лайки:
    611
    Репутация:
    282
    ((void(__thiscall *)(void*))(/*func addr*/))(pObject);
     
    #5
  6. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
     
    #6
  7. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    912
    Лайки:
    1.771
    Репутация:
    699
    >раздел C и C++
    >
    :(
    интересно где вы берёте такие теории, из своего воображения?
     
    #7
  8. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    А как ещё? Для каждого экземпляра класса создаются еще и свои экземпляры функций.
     
    #8
  9. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    912
    Лайки:
    1.771
    Репутация:
    699
    это в дельфи так? бедный, бедный дельфи...
    честно не знаю в какой ужас превращается код классов на delphi после компиляции, но в любом другом нормальном компиляторе все функции у класса для всех экземпляров класса общие, в том числе и в MSVC.
    https://ru.wikipedia.org/wiki/Соглашение_о_вызове
    https://msdn.microsoft.com/ru-ru/library/k2b2ssfy.aspx
     
    #9
  10. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Все благодаря стандартам, поэтому код VC++ в основном компилируется и под MinGW.
    В делфи я хз как, но как то так точно должно быть.
     
    #10
  11. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.561
    Лайки:
    1.520
    Репутация:
    414
    У D отличный компилятор, но там все функции хранятся в vtable
     
    #11
  12. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Причем тут D? D != Delphi
     
    #12
  13. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.561
    Лайки:
    1.520
    Репутация:
    414
    А при чем тут Delphi, я поправил фипа, в его высказывании о компиляторах, которые должны компилить классы в стиле C++
     
    #13
  14. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Хули тогда у явы классы компилятся в свой байткод а не в стиле плюсов как сказал FYP :D
     
    #14
  15. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    557
    Лайки:
    611
    Репутация:
    282
    Тогда через fastcall передаешь в ecx регистре свой обьект
     
    #15
  16. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    912
    Лайки:
    1.771
    Репутация:
    699
    ну если прям все функции хранятся в таблицах, то можно поспорить с тем, что он отличный. это ведь, как-никак, влияет на производительность.
     
    #16
  17. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.561
    Лайки:
    1.520
    Репутация:
    414
    Не могу 100% утверждать про функции с префиксом final, но все остальные по умолчанию являются виртуальными
     
    #17