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, так как он падает после попытки получить информацию о методе? Может ли кто-нибудь с опытом здесь помочь?