如何对比两个结构体是否相同?
type TXX= packed record bUpdateUp: Boolean; end; TTestAds = packed record Len1: DWORD; Len2: DWORD; Len3: DWORD; XX: array of TXX; end;
procedure TForm1.Button3Click(Sender: TObject);type TXX = packed record bUpdateUp: Boolean; end; TTestAds = packed record Len1: DWORD; Len2: DWORD; Len3: DWORD; XX: array of TXX; end;var s1, s2: TTestAds; FType: TRttiType; FRecordType: TRttiRecordType; FField: TRttiField; FContext: TRttiContext; Val1, Val2: TValue; i: Integer;begin s1.Len1 := 1; s1.Len2 := 2; s1.Len3 := 3; SetLength(s1.XX, 2); s1.XX[0].bUpdateUp := True; s1.XX[1].bUpdateUp := False; s2.Len1 := 2; // RTTI反射 // FContext := TRttiContext.Create; FType := FContext.GetType(TypeInfo(TTestAds)); for FField in FType.GetFields do begin Memo1.Lines.Add('FieldType=' + FField.FieldType.ToString); //FieldType=:TTestAds.:1 if FField.FieldType.IsRecord then begin // 把这里做成函数递归吧 end; Val1 := FField.GetValue(@s1); Val2 := FField.GetValue(@s2); if Val1.IsArray then begin for i := 0 to Val1.GetArrayLength - 1 do begin Memo1.Lines.Add(Format('%s[%d] = %s', [FField.Name, i, Val1.GetArrayElement(i).ToString])); end; end else Memo1.Lines.Add(FField.Name + ' = ' + Val1.ToString); end; // FContext.Free;end;