Delphi RTTI & C++

Этот пост продолжается с вопроса на C++ Builder Journal Forum с помощью Реми Лебо. Моя проблема - отсутствие понимания о Delphi RTTI и как использовать его в C++ Builder. Существует много документации о том, как использовать RTTI для получения информации о типе и т. Д., Но не так много, как использовать ее для обнаружения.

Из моего понимания ниже следует настроить методы для обнаружения RTTI:

class DELPHICLASS MyClass : public MyOtherClass
{
   public:
     //Methods...
   __published:
     //Methods...
}

Это мой класс на данный момент, который переопределяет виртуальные методы в интерфейсе UIAlertViewDelegate в Embarcadero iOS API iOSapi.UIKit.hpp.

class DELPHICLASS TAlertViewDelegate : public TOCLocal, public UIAlertViewDelegate
{
    typedef Macapi::Objectivec::TOCLocal inherited;
    INTFOBJECT_IMPL_IUNKNOWN(TOCLocal);
    public:
        virtual void __cdecl alertView(_di_UIAlertView alertView, aarch_int_t clickedButtonAtIndex);
        virtual void __cdecl alertViewCancel(_di_UIAlertView alertView);
        virtual void __cdecl didPresentAlertView(_di_UIAlertView alertView);
        virtual void __cdecl alertViewDidDismissWithButtonIndex(_di_UIAlertView alertView, aarch_int_t didDismissWithButtonIndex);
};

Однако, когда я создаю экземпляр этого класса и размещаю его в куче, используя:

_di_UIAlertViewDelegate Delegate = (UIAlertViewDelegate *)new TAlertViewDelegate();

Я получаю ошибку RTTI, связанную с Delphi:

Исключение из первого шанса на $00158015. Класс исключения EObjectiveC с сообщением 'RTTI для типа UIAlertViewDelegate не найден. Возможно, отсутствует {$M+}?'. Делегаты процесса (250202)

Изменение методов моего класса с открытых на __published избавит от этой ошибки, но приведет к нарушению прав доступа, но при рассмотрении стека вызовов происходит следующее:

  • Вызывается TOCLocal Constructor
  • TRTtiType GetMethods Called
  • Читать данные метода
  • Читать расширенные данные метода
  • Читать объект
  • Читать объект указатель
  • Читать объект (снова)
  • Создать TRTTIInstanceMethodClassic
  • Нарушение доступа

Очевидно, что здесь что-то не так с RTTI, так как он падает после попытки получить информацию о методе? Может ли кто-нибудь с опытом здесь помочь?

0 ответов

Другие вопросы по тегам