AGB  ·  Datenschutz  ·  Impressum  







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

Initialization-Abschnitte protokollieren?

Ein Thema von Ralf Kaiser · begonnen am 12. Dez 2014 · letzter Beitrag vom 13. Dez 2014
Antwort Antwort
bepe

Registriert seit: 17. Okt 2006
119 Beiträge
 
#1

AW: Initialization-Abschnitte protokollieren?

  Alt 13. Dez 2014, 20:13
Zunächst einmal würde ich mich in SysUtils LoadPackage oder InitializePackage per Code Injection einklicken. In der eigenen Anwendung sollte das kein allzu großes Problem sein. Die Variante hätte den Vorteil, dass wir die Reihenfolge in der die BPLs geladen werden loggen können.
Alternative könnte man auch einfach ein kleines Tool schreiben mit dem man die BPLs nacheinander abarbeitet. Aus LoadPackage bzw. InitializePackage interessiert eigentlich nur das ModuleHandle. Und das bekommen wir genauso gut per LoadLibrary .

Um es kurz (,schlampig und ungetestet) zu machen:

Delphi-Quellcode:
function GetLibTypeinfo(AModule: HModule): TPackageTypeInfo;
var
  tmpGetInfo: GetPackageInfoTable;
  tmpInfo: PackageInfo;
begin
  tmpGetInfo := GetProcAddress(tmpLib, '@GetPackageInfoTable');
  tmpInfo := tmpGetInfo;
  Result := tmpInfo.TypeInfo;
end;

function GetLibTypeinfoByName(const ALibName: String): TPackageTypeInfo;
var
  tmpLib: HModule;
begin
  tmpLib := LoadLibrary(ALibName);
  Result := GetLibTypeinfo(tmpLib);
  FreeLibrary(tmpLib);
end;
Jetzt nur das Beispiel anpassen:
Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
var
  sl: TStringList;
  ps: PShortString;
  tmpInfo: TPackageTypeInfo;
begin
  ...
  tmpInfo := GetLibTypeinfoByName('Meine.bpl');
  ...

  sl := TStringList.Create;
  try
    ps := tmpInfo.UnitNames;

    for i := 0 to tmpInfo.UnitCount - 1 do
    begin
      sl.Add(ps^);
      // Move to next unit
      DWORD(ps) := DWORD(ps) + Length(ps^) + 1;
    end;

    Memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end;
end;

Zitat:
(es sind eine Menge Packages dabei die als 3rd-Party nicht meiner Kontrolle unterliegen).
Das irritiert mich etwas. Vermutlich bedeutet es kein Quelltext. Dann frage ich mich warum die Init Reihenfolge interessant sein könnte... Aber egal.

Sollte doch Quelltext da sein,

- dann könnte es schon ausreichen auch die BPls mit aktivierten Laufzeitpackages zu erzeugen. Denn dann wird (ungetestet also eigentlich sollte)die RTL bzw. der SysInit "Kram" aus der Anwendung von den BPLs verwendet werden (sonst machen diese, wie festgestellt, ihren eigenen Init "Lauf").

- könnte man auch einfach eine kleines Plugin schreiben, welches die Reihenfolge der Kompilierung protokolliert (denn in dieser sollte auch initialisiert werden). Wenn wirklich nur Units mit Init Abschnitt geloggt werden sollen, dann könnte man eben mit dem Lexer von Castalia prüfen ob einer Existiert (http://code.google.com/p/castaliadelphiparser/). Sollte auch recht schnell umgesetzt sein.

mfg,
bp
  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 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz