2012-02-29 2 views
6

내가이 클래스가 속성 TReportItem.GetTableName<TReportItem>을; <>TReportItem을 상속하는 모든 클래스가 될 수 있습니다.오류가

하지만 때로는 내가 전화 : TReportItem.GetTableName 명령에서 LRttiType.GetAttributes 때로는 액세스 위반이 '컴파일'에 따라 달라집니다. 그것은 마법처럼 작동하고 멈 춥니 다. 나는 무슨 일이 일어나고 있는지 모른다. 누군가 나에게 힌트를 줄 수 있니?

문제는 GetAttributes입니다.이 메서드를 사용하면 fiels, 메서드 등에서 특성을 가져올 수 있습니다. 액세스 위반이 발생합니다. 그것을 사용하기 위해 내가 켜거나 끌어야하는 지침이 있습니까?

내가 Shift + F9, 내가 단위의 모든 라인을 수정하고 F9에게GetAttributes 작품을 사용하여 컴파일하면 GetAttributes는, AV 나 줄을 사용하여 컴파일하는 경우.

내 컴퓨터뿐 아니라 다른 8 명의 프로그래머도 동일한 문제가 있습니다. 델파이 XE. 내가 Rtti.pas에 imp := PPPointer(p)^^에, 오늘 같은 AV를 시간 동안 동일한 문제를 겪고

function FindCtor(AttrType: TRttiInstanceType; CtorAddr: Pointer): TRttiMethod; 
type 
    PPPointer = ^PPointer; 
var 
    p: PByte; 
    imp: Pointer; 
begin 
    for Result in AttrType.GetMethods do 
    if Result.CodeAddress = CtorAddr then 
     Exit; 
    // expect a package (i.e. DLL) import 
    p := CtorAddr; 
    Assert(p^ = $FF); // $FF $25 => indirect jump m32 
    Inc(p); 
    Assert(p^ = $25); 
    Inc(p); 
    imp := PPPointer(p)^^; //ERROR HAPPENS HERE 
    for Result in attrType.GetMethods do 
    if Result.CodeAddress = imp then 
     Exit; 
    Result := nil; 
end; 
+0

'TReportItem.GetTableName'에 전화를 걸 수 있습니까? –

+0

당신이 AV를 얻을 때,'LRttiType'은 어떤 가치가 있습니까? –

+0

죄송합니다. AV 란 무엇입니까? –

답변

0

:

오류가 rtti.pas이 코드에서 발생합니다.

프로젝트에서 관련이없는 두 개의 단위에서 2 개의 속성에 동일한 이름을 사용한다는 사실을 발견했습니다.

+0

동일한 문제가 있으며 동일한 이름의 특성이 없습니다. @ SaCi로 .dpr 내부의 단위가 변경되었지만 오류가 지속됩니다. –