Autor Beitrag
spawn89
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: 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
ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
unit System;

interface

procedure _HandleFinally;

type
  TGUID = record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7of 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
ausblenden 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; //Pointer;
  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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
program HelloWorld;

function MessageBoxA(hWnd: Cardinal; lpText, lpCaption: Pchar; uType: Cardinal): Integer; stdcallexternal '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. :cry:
Und keine Diskussion über Sinn/Unsinn.
Danke :!:
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: So 20.03.11 03:25 
Ich sag es ja... Windows 7 ist einfach nur sch**** :autsch:
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



BeitragVerfasst: So 20.03.11 04:00 
Warum ist alles, was man nicht gleich versteht *mist*e?
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: So 20.03.11 06:29 
@Luckie
Verstehst du es denn? Warum hilfst du ihm dann nicht...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 20.03.11 13:45 
Ich verstehe es auch nicht, was aber nicht heißt, dass das gleich Mist ist.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: So 20.03.11 21:32 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: 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. :lol:

Einerseits interessiert es mich einfach, drauf gekommen bin ich aber als ich ein paar Komponenten von user profile iconjaenicke 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. :)

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:


Zuletzt bearbeitet von spawn89 am Mo 21.03.11 10:59, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 5

XP SP2; 7
D7; D2009
BeitragVerfasst: 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) :mrgreen::
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: 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" :P )
Danke für die Links.
spawn89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: Di 22.03.11 09:22 
user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
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. :zwinker:

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
Edit: Wenn es dir nicht um Funktionsumfang geht:
www.delphibasics.inf...ationsindelphibyn0v4

Da gibts das gleiche Problem wie bei den Units oben - Nicht in Win 7 lauffähig.

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
Falls du den Rekord brechen willst (97 bytes) :mrgreen::
www.phreedom.org/solar/code/tinype/

Naja sooo weit runter wollt ich mit Delphi jetzt auch nicht kommen.
Aber, unterbieten? Gerne - siehe Anhang. (28 bytes) :tongue:
(Nicht direkt von mir^^)
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 22.03.11 09:36 
user profile iconspawn89 hat folgendes geschrieben Zum zitierten Posting springen:
Aber, unterbieten? Gerne - siehe Anhang. (28 bytes) :tongue:
(Nicht direkt von mir^^)
Das zählt nicht, das ist ja eine 16-Bit DOS-Exe, die deshalb logischerweise auch unter 64-Bit z.B. gar nicht mehr läuft...
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: 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? 8)
spawn89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: Mi 23.03.11 20:00 
Danke für das Interesse, hier die minimalsten Versionen:

SysInit.pas
ausblenden 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
ausblenden volle Höhe 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:
30:
31:
32:
unit System; 

interface

procedure _Halt0;
procedure _HandleFinally; 

type
  TGUID = record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array [0..7of Byte;
  end;
 
var
  ExitCode: Integer = 0
  
procedure ExitProcess(ExitCode: Integer); stdcallexternal '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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: 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. :lol:
spawn89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 82
Erhaltene Danke: 6

Linux
CodeTyphon
BeitragVerfasst: 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. :wink:
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: 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.