Danke für all eure Erklärungen und Tips - ich kann hier so viel lernen.
Das konkrete Problem habe ich wie gesagt nun organisatorisch gelöst:
- für 64bit compiliere ich einmal mit CLASSES und Stringlist und entsprechendem Algorithmus dazu und einmal eben ohne.
Die Steuerung erfolgt über ein {$DEFINE} und Windows bzw Linux erstellen mir eine zweite Binary, die ich umbenenne (die ohne Stringlist erhält einen neuen Namen).
Der Aufruf des Algorithmus kommt eh nur in bestimmten Fällen (Eingabe und Ausgabe über Files, maximale Größe bzw Zeilenzahl und abschalten kann der User das ganze auch noch) zum Tragen und das wird dann wenn vorhanden und möglich erkannt und es geht schneller. Kann aber auch abbrechen, und dann wird restarted und man hatte eben Zeitverlust, das nehme ich mal in Kauf.
- für 16/32bit ist das Ganze unsichtbar (wieder Compilerschalter) und zusätzlich ist auch die SysUtils nicht mit drin, eben wegen Größe.
Weil du fragst, was ich mit dem SearchRec meine, na das hier:
Code: Alles auswählen
PROCEDURE Loesche_Alle_Temp;
VAR anz: LONGINT;
dir: {$IFDEF BIT_64} TSearchRec; {$ELSE} SearchRec; {$ENDIF}
BEGIN
anz:=0;
{$IFDEF BIT_64}
IF FindFirst(tempbest+'.*',faAnyFile,dir)=0 THEN BEGIN
REPEAT
Loesche_Temp(dir.Name, anz);
UNTIL FindNext(dir)<>0;
FindClose(Dir);
END;
{$ELSE}
FindFirst(tempbest+'.*',AnyFile,dir);
WHILE (DosError=0) DO BEGIN
Loesche_Temp(dir.Name, anz);
FindNext(dir);
END;
{$IFNDEF DOS} FindClose(Dir); {$ENDIF}
{$ENDIF}
IF anz>0 THEN Log('F',1,' '+StrCardInt(anz)+'x TMP');
END;
Lasse ich die Sonderbehandlung für 64bit weg, kann ich es nicht mehr compilieren weil irgendwie der SearchRec oder die Proceduren in der Bibliothek anders definiert sind, so ganz schlau werde ich nicht aus der Fehlermeldung des (Batch) FPC. Wenn ich andersherum bei 32bit auch TSearchRec nehme, handele ich mir die SysUtils und damit eine EXE-Vergrößerung ein, ohne zusätzlichen Nutzen (ich habe sonst aus den SysUtils nix benutzt in dem Programm).
Zum Smart-Link - wie erkenne ich das beim Batch-FPC? Habe auf Anhieb den Switch nicht gefunden?
Und ja, das mit der DLL ist mir zu aufwändig und zu schwer.
Und die Unit bzw StringList Definition werde ich mal suchen, aber hey - in FreePacal gibt es kein String+Click, aber gut ich nehme Lazarus. Wenn ich mir die TString und die TStringList so anschaue, habe ich sofort beschlossen, das bleibt da alles fein in der Unit und ich baue nix nach bzw lasse es so wie es ist. Immerhin funktioniert mein Sort besser als der dort aus der Unit, das war ja ursprünglich auch Sinn und Zweck der Übung bzw meines ganzen 5.Algorithmus gewesen.
ABER: Danke, daß ich so "gezwungen war" mein Batch-Programm auch mal als Projekt im Lazarus anzusehen und zu compilieren, sprich eine andere IDE zu nehmen. Die EXE wird je nach Debug-Info Einstellung 950 KByte oder wieder 372 KByte (10 mehr???) groß, ob es Laufzeitabweichungen gibt, kann ich noch nicht sagen, habe mir das nur mal so gesichert.