C ++ Builder中TRttiType.GetMethods函数中引发的异常

时间:2016-09-26 00:44:01

标签: c++builder rtti

版本:C ++ Builder 10.1 编译:bcc32c

使用Delphi编写的库时,TRttiType.GetMethods函数发生异常。 我试过单独测试函数,它会导致同样的异常。 以下是测试中使用的代码。 什么是C ++ Builder中的问题。

Unit1.cpp:

#include <memory>
#include "Unit2.hpp"

class PACKAGE TCpp : public TDelphi // new class derived from delphi class
{
__published:
    void __fastcall Proc2(void);
};
void __fastcall TCpp::Proc2(void)
{
    Proc();
}

inline int __fastcall GetMethodCount(TClass AClass)
{
    const _STD unique_ptr<TRttiContext> LContext(_STD make_unique<TRttiContext>());
    return LContext->GetType(AClass)->GetMethods().Length; // GetMethods raise exception
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ShowMessage(GetMethodCount(__classid(TDelphi))); // safe
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    ShowMessage(GetMethodCount(__classid(TCpp))); // exception
}

Unit2.pas:

unit Unit2;

interface

uses
  Winapi.Windows;

type
  TDelphi = class
  published
    procedure Proc;
  end;

implementation

{ TDelphi }

procedure TDelphi.Proc;
begin
  Sleep(0);
end;

end.

0 个答案:

没有答案