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

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

Статус темы:
Закрыта.
  1. monobogdan

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

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

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

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

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.2013
    Сообщения:
    599
    Симпатии:
    684
    Репутация:
    311
    Может ты уже перестанешь создавать темы для каждого вопроса и наконец откроешь для себя эту тему [http://blast.hk/threads/781/ ??

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

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

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

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.2013
    Сообщения:
    599
    Симпатии:
    684
    Репутация:
    311
    ((void(__thiscall *)(void*))(/*func addr*/))(pObject);
     
  6. monobogdan

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

    Регистрация:
    26.12.2016
    Сообщения:
    66
    Симпатии:
    1
    Репутация:
    1
     
  7. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.113
    Симпатии:
    1.959
    Репутация:
    735
    >раздел C и C++
    >
    :(
    интересно где вы берёте такие теории, из своего воображения?
     
  8. monobogdan

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

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

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

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

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

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

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.664
    Симпатии:
    1.652
    Репутация:
    438
    У D отличный компилятор, но там все функции хранятся в vtable
     
  12. monobogdan

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

    Регистрация:
    26.12.2016
    Сообщения:
    66
    Симпатии:
    1
    Репутация:
    1
    Причем тут D? D != Delphi
     
  13. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.664
    Симпатии:
    1.652
    Репутация:
    438
    А при чем тут Delphi, я поправил фипа, в его высказывании о компиляторах, которые должны компилить классы в стиле C++
     
  14. monobogdan

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

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

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.2013
    Сообщения:
    599
    Симпатии:
    684
    Репутация:
    311
    Тогда через fastcall передаешь в ecx регистре свой обьект
     
  16. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.113
    Симпатии:
    1.959
    Репутация:
    735
    ну если прям все функции хранятся в таблицах, то можно поспорить с тем, что он отличный. это ведь, как-никак, влияет на производительность.
     
  17. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.664
    Симпатии:
    1.652
    Репутация:
    438
    Не могу 100% утверждать про функции с префиксом final, но все остальные по умолчанию являются виртуальными
     
Статус темы:
Закрыта.