AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Instanzieren von Komponenten

Ein Thema von Jelly · begonnen am 27. Mai 2007 · letzter Beitrag vom 27. Mai 2007
Antwort Antwort
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

Instanzieren von Komponenten

  Alt 27. Mai 2007, 14:00
Mich beschäftigt grad eine Frage.

Wo im Code werden eigentlich Komponenten bei Ausführung des Programm erzeugt. Ich meine, ich lege irgendein Control zur Design Time auf ein Formular. Von der Klasse muss ja irgendwann zur Laufzeit eine Instanz erstellt werden, und ich denke auch die Stele gefunden zu haben, nämlich der Constructor von TWinControl, wo ein MakeObjectInstances aus der Unit Classes aufgerufen wird. Dazu hier mal der Code. Aber verstehen tu ich den nicht. Also was passiert da im Hintergrund:
Delphi-Quellcode:
function MakeObjectInstance(Method: TWndMethod): Pointer;
const
  BlockCode: array[1..2] of Byte = (
    $59, { POP ECX }
    $E9); { JMP StdWndProc }
  PageSize = 4096;
var
  Block: PInstanceBlock;
  Instance: PObjectInstance;
begin
  if InstFreeList = nil then
  begin
    Block := VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    Block^.Next := InstBlockList;
    Move(BlockCode, Block^.Code, SizeOf(BlockCode));
    Block^.WndProcPtr := Pointer(CalcJmpOffset(@Block^.Code[2], @StdWndProc));
    Instance := @Block^.Instances;
    repeat
      Instance^.Code := $E8; { CALL NEAR PTR Offset }
      Instance^.Offset := CalcJmpOffset(Instance, @Block^.Code);
      Instance^.Next := InstFreeList;
      InstFreeList := Instance;
      Inc(Longint(Instance), SizeOf(TObjectInstance));
    until Longint(Instance) - Longint(Block) >= SizeOf(TInstanceBlock);
    InstBlockList := Block;
  end;
  Result := InstFreeList;
  Instance := InstFreeList;
  InstFreeList := Instance^.Next;
  Instance^.Method := Method;
end;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Instanzieren von Komponenten

  Alt 27. Mai 2007, 14:06
Zitat von Jelly:
Wo im Code werden eigentlich Komponenten bei Ausführung des Programm erzeugt. Ich meine, ich lege irgendein Control zur Design Time auf ein Formular. Von der Klasse muss ja irgendwann zur Laufzeit eine Instanz erstellt werden, und ich denke auch die Stele gefunden zu haben
Das ist gewiss nicht die Stelle, wo die Controls erzeugt werden. Die werden vom TReader beim Einlesen der DFM-Ressource erzeugt. MakeObjectInstance erzeugt "nur" einen WindowProc Stub, der die WindowProc an eine WndProc einer Objekt-Instance bindet.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Instanzieren von Komponenten

  Alt 27. Mai 2007, 14:24
Zitat von jbg:
Die werden vom TReader beim Einlesen der DFM-Ressource erzeugt.
Und wo passiert das. Hab mich jetzt mal bischen durch die ganzen constructors gewühlt, und nichts dazu gefunden. Neben dem Instanzieren passiert ja wohl noch mehr, denn die ganzen published properties die zur Designstime im OI gesetzt werden, müssen zur Laufzeit ja auch eingelesen werden.
Zitat von jbg:
MakeObjectInstance erzeugt "nur" einen WindowProc Stub, der die WindowProc an eine WndProc einer Objekt-Instance bindet.
OK, dem war mir nicht bekannt.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Instanzieren von Komponenten

  Alt 27. Mai 2007, 14:47
Zitat von Jelly:
Und wo passiert das. Hab mich jetzt mal bischen durch die ganzen constructors gewühlt, und nichts dazu gefunden.
Na dann schau mal in der Forms.pas nach TCustomForm.Create(). Und dort insbesondere den Aufruf der Funktion InitInheritedComponent() und alles was diese Funktion wiederum aufruft.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Instanzieren von Komponenten

  Alt 27. Mai 2007, 15:02
Alles klar, jetzt hab wirds klarer. Vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz