いやはやいやはや。
なんだか突然に消える……とか起動できない……などと言うバグがあるのですが、原因が特定できなかったのでソースコードを破棄。ゼロから再出発してみました。
まぁどっかの段階でやらねばなーとか思ってたし。色々と再発見があるやら、元々気に入らんかったユニットの構成やらがちょっとマシになるやらで。
突然消える件に付いては、かなり改善が見られるものの無くなったわけではないのがショック。DLL 使ってるとは言え、勝手に死ねるようなコードがかけるケースには無視するとかして存続の方向でやってもらいたい気もしますが……
あと本体自体が落ちてるケースも少なくない……。ってこれウチだけかもしらん。
begin Sct := TDicStrings.Create; List := TDicStrings.Create; try for I:=0 to Max-1 do if (Self[I] <> '') then if (Self[I][1] = '[') then Sct.Append( Self[I] ); if (SectName = '') then SectName := Sct.GetLineAtRandom else SectName := '['+SectName+']'; Head := Sct.IndexOf( SectName ); if (Head = -1) then begin Head := 0; Tail := Max-1; end else begin Head := Self.IndexOf( SectName )+1; if (Sct.IndexOf( SectName ) = Sct.Count-1) then Tail := Max-1 else Tail := Self.IndexOf( Sct[ Sct.IndexOf( SectName )+1 ] )-1; end; List.FileType := ftLotate; for I:=Head to Tail do List.Append( Self[I] ); Idx := List.IndexOfName( 'Remain' ); if (Idx >= 0) then begin List.Remain := StrToInt( List.Values['Remain'] ); List.Delete( Idx ); end; Result := List.GetLineAtRandom; try for I:=0 to List.Count-1 do Self[Head+I] := List[I]; // ここでエラーになってる except AddDebugLog( 'GetLineAtRandom('+SectName+')', Result+#13#10+IntToStr(List.Remain)+#13#10+List.Text ); end; Self[Tail] := 'Remain='+IntToStr(List.Remain); finally Sct.Free; List.Free; end; end; |