Autor |
Beitrag |
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Sa 19.03.11 14:45
Hi,
ich suche minimale Versionen der System.pas und SysInit.pas, welche in Windows 7 lauffähig sind.
Folgende 2 funktionierten super auf XP:
System.pas
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| unit System;
interface
procedure _HandleFinally;
type TGUID = record D1: LongWord; D2: Word; D3: Word; D4: array[0..7] of Byte; end;
TDLLProc = procedure(Reason: Integer); TDLLProcEx = procedure(Reason: Integer; Reserved: Integer);
procedure _Halt0;
var ExitCode: Integer;
implementation
procedure _Halt0; assembler; asm mov eax, [ExitCode] leave end;
procedure _HandleFinally; assembler; asm mov eax, True end;
end. |
SysInit.pas
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| unit SysInit;
interface
var TlsIndex: Integer; TlsLast : Byte; PtrToNil: Pointer;
var HInstance: Cardinal; GetCommandLine: PAnsiChar;
procedure _InitExe;
implementation
procedure _InitExe; assembler; asm mov eax, [ebp+$08] mov [HInstance], eax mov eax, [ebp+$10] mov [GetCommandLine], eax end;
initialization _InitExe;
end. |
Wenn ich jetzt folgende Test-dpr auf Win 7 starte, bleibt der Prozess noch nach der MessageBox offen und schließt sich nie.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| program HelloWorld;
function MessageBoxA(hWnd: Cardinal; lpText, lpCaption: Pchar; uType: Cardinal): Integer; stdcall; external 'user32.dll' name 'MessageBoxA';
begin MessageBoxA(0, 'Hello World', 'test', 0); end. |
BTW: Die KOL-Sys-Units funktionieren auch auf Win 7.
Ich bin mir sicher hier weiß jemand woran das liegt, bitte helfen.
Und keine Diskussion über Sinn/Unsinn.
Danke
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: So 20.03.11 03:25
Ich sag es ja... Windows 7 ist einfach nur sch****
Ich nehme mal an du arbeitest an einer 64K demo oder sowas in der Art, nicht?
Kann dir aber leider auch nicht helfen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 20.03.11 04:00
Warum ist alles, was man nicht gleich versteht *mist*e?
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: So 20.03.11 06:29
@Luckie
Verstehst du es denn? Warum hilfst du ihm dann nicht...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 20.03.11 13:45
Ich verstehe es auch nicht, was aber nicht heißt, dass das gleich Mist ist.
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 20.03.11 19:45
Darf ich fragen, was das bezweckt? Ist das ein Experiment, oder wozu ist das gut? Kann man auf derlei kastrierte elementare Units noch irgendetwas aufsetzen, bekommt man damit noch anderweitige Programme mit höherer Funktionalität erstellt?
Oder hat das den Zweck, zu zeigen, daß Windows 7 "Mist" ist (eine Ansicht, die ich durchaus teile, aber es ist immerhin noch das beste aller "Vistas").
Es geht mir nicht darum, den Sinn in Zweifel zu ziehen, sondern es ist pure Neugier.
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 20.03.11 19:58
Ich habe sowas an einem Punkt auch gemacht, das ist auch so ziemlich der einzige sinnvolle Anwendungszweck, den ich sehe:
Und zwar habe ich ein SFX-Modul geschrieben, das logischerweise so klein wie möglich sein sollte. Inklusive der Unzip-Unterstützung und einer visuellen Oberfläche war das dann am Ende ca. 32 KiB groß.
Mittlerweile habe ich es durch ein in C# geschriebenes ersetzt, das mit weniger Mühe noch kleiner wird, glaub das waren jetzt 12 KiB oder so...
Eine derart verstümmelte System-Unit hatte ich dafür aber nicht benutzt...
Ich habe lediglich die SysUtils-Unit stark reduziert und dafür, dass es mit GUI und in Delphi geschrieben war, reichte mir die Grüße.
Meine Vermutung in diesem Fall hier ist _HandleFinally als Ursache. Denn wenn ich mir das so anschaue, ist es ein Wunder, dass das unter XP ohne Probleme funktioniert hat...
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: So 20.03.11 21:32
jaenicke hat folgendes geschrieben : | Ich habe sowas an einem Punkt auch gemacht, das ist auch so ziemlich der einzige sinnvolle Anwendungszweck, den ich sehe:
Und zwar habe ich ein SFX-Modul geschrieben, das logischerweise so klein wie möglich sein sollte. Inklusive der Unzip-Unterstützung und einer visuellen Oberfläche war das dann am Ende ca. 32 KiB groß. |
Nicht jeder programmiert für irgendwelche Kunden oder um sein Programm auf den Markt zu bringen... "Sinnvoll" erscheinen mir extrem kleine Exen durchaus für die Demoszene. Es sei denn, man will in der >1 MB Liga mitmachen, was nicht allzu beeindruckend ist.
jaenicke hat folgendes geschrieben : | Meine Vermutung in diesem Fall hier ist _HandleFinally als Ursache. Denn wenn ich mir das so anschaue, ist es ein Wunder, dass das unter XP ohne Probleme funktioniert hat... |
Hast eine Idee wie es besser gehen könnte?
(Ich weiß, das ist nicht mein Thread, aber interessiere mich auch für dieses Thema..)
|
|
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Mo 21.03.11 10:54
Ne, das wird _vorerst_ nicht für Demos genutzt und war schon gar nicht dazu gedacht Win 7 nieder zu machen.
Einerseits interessiert es mich einfach, drauf gekommen bin ich aber als ich ein paar Komponenten von jaenicke ersetzen wollte.
U.a. ein Updater und die ExeStream-Kompo, da die zB immer die komplette Exe hin und her schiebt....
Und dieser Updater bzw. 'Settingsloader' soll möglichst klein sein.
Und ja, das wird dann nur privat eingesetzt. Die Kunden bekämen so oder so eine völlig überladene Version.
Ich hoffe jetzt sind alle Fragen geklärt und alle zufrieden.
Luckie hat folgendes geschrieben : | Ich verstehe es auch nicht, |
Du hast nicht zufällig noch Kontakt zu Nico, der mich überhaupt erst darauf gebracht hat? ( Importe/Nico/)
Vllt könnte man ja die KOL-Sys-Units immer weiter reduzieren, bis es irgendwann auch nicht mehr auf Windows 7 läuft.
So sollte man ja eigentlich dann mitbekommen woran es liegt.
Zuletzt bearbeitet von spawn89 am Mo 21.03.11 10:59, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 21.03.11 11:40
Leider nein, habe ihn schon lange nicht mehr im ICQ gesehen. Aber ich hatte damit schon unter XP Probleme. Geschrieben war es wohl ursprünglich für Windows 2000.
|
|
SAiBOT
Beiträge: 323
Erhaltene Danke: 5
XP SP2; 7
D7; D2009
|
Verfasst: Mo 21.03.11 23:30
Hiermit kommst du auf nicht ganz 7kb und musst auf kaum eine Funktion verzichten.
Getestet unter Delphi7/Win7.
Edit: Wenn es dir nicht um Funktionsumfang geht:
www.delphibasics.inf...ationsindelphibyn0v4
Falls du den Rekord brechen willst (97 bytes) :
www.phreedom.org/solar/code/tinype/
Einloggen, um Attachments anzusehen!
_________________ Debuggers don't remove bugs, they only show them in slow-motion.
Für diesen Beitrag haben gedankt: Martok
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: Di 22.03.11 06:09
hehe, technisch gesehen ist dieser Rekord ja unbrechbar. Hat er jedenfalls geschrieben. Aber wer weiß...
("TOYOTA - Nichts ist unmöglich" )
Danke für die Links.
|
|
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Di 22.03.11 09:22
SAiBOT hat folgendes geschrieben : | Hiermit kommst du auf nicht ganz 7kb und musst auf kaum eine Funktion verzichten.
Getestet unter Delphi7/Win7. |
Wie gesagt, die KOL-Sys-Units funktionieren unter Win 7. Sind mir aber trotzdem zu oversized.
Da gibts das gleiche Problem wie bei den Units oben - Nicht in Win 7 lauffähig.
Naja sooo weit runter wollt ich mit Delphi jetzt auch nicht kommen.
Aber, unterbieten? Gerne - siehe Anhang. (28 bytes)
(Nicht direkt von mir^^)
Einloggen, um Attachments anzusehen!
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 22.03.11 09:36
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: Mi 23.03.11 00:52
Was hast du denn vor, spawn89? Da du ja keine Demo machen willst, nehm ich an du bist auch ein Größenfetischist?
|
|
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Mi 23.03.11 10:25
Steht doch oben. Erstmal schaffen, vllt wird daraus ja mehr wie ne eigene kleine rtl oder was weiß ich...
Komme aber voran, gestern liefs testweise schon unter Win7, heut Abend mehr...
|
|
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Mi 23.03.11 20:00
Danke für das Interesse, hier die minimalsten Versionen:
SysInit.pas
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| unit SysInit;
interface
procedure _InitExe(InitTable: Pointer);
var TlsIndex: Integer = -1; TlsLast: Byte; const PtrToNil: Pointer = nil;
implementation
procedure _InitExe(InitTable: Pointer); begin end;
end. |
System.pas
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| unit System;
interface
procedure _Halt0; procedure _HandleFinally;
type TGUID = record D1: LongWord; D2: Word; D3: Word; D4: array [0..7] of Byte; end; var ExitCode: Integer = 0; procedure ExitProcess(ExitCode: Integer); stdcall; external 'kernel32.dll' name 'ExitProcess';
implementation
procedure _Halt0; begin ExitProcess(ExitCode); end;
procedure _HandleFinally; asm end;
end. |
Die Variablen TlsIndex, TlsLast und PtrToNil aus der SysInit.pas kann man auch weglassen. Der Compiler schmeißt dann jedoch Fehler, aber die Exe erzeugt er trotzdem.
Compiler: Delphi 2007
Getestet unter: Windows 98, XP 32b, Vista 32b, 7 64b
Resultierende Größe der Exe ohne Modifikationen: 4 KB
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: Fr 25.03.11 01:41
Genial! Ich kann nur für XP testen aber da funktioniert es einwandfrei.
Sogar nachdem ich ein Fenster erstellt habe ist es noch immer bei 4 KB. 275% kleiner als mit Standard-RTL mit 15 KB!
Und 9000% kleiner als ein leeres Fenster mit der VCL.
|
|
spawn89
Beiträge: 82
Erhaltene Danke: 6
Linux
CodeTyphon
|
Verfasst: Fr 25.03.11 10:11
375%* ^^
Das lustige, ich hatte zwichenzeitlich eine Version bei der ich nur Klassen, den Interface-Krims und noch nen bissl Zeugs rausgeschmissen hab und es trotzdem 4 KB ergaben.
Strings und der MemManager waren voll lauffähig.
|
|
FrEaKY
Beiträge: 235
D7
|
Verfasst: Sa 26.03.11 05:39
Nachdem ich mein Programm weiter ausgebaut hatte (zeichnen von Shapes und so) musste ich zwar die eine 5 KB RTL wieder reinmachen und jede Menge Zeug aus der Windows.pas reinholen, weil es Fehler beim kompilieren gab, aber ich hab einfach noch nicht genug Erfahrung auf dem Gebiet. Mache WinApi erst seit paar Tagen so richtig
Jetzt bin ich zwar auf ~9 KB. Aber immer noch niedriger als normal.
|
|