AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie ermittelt man welche Komponenten in einem Package sind?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie ermittelt man welche Komponenten in einem Package sind?

Ein Thema von MaBuSE · begonnen am 21. Apr 2005 · letzter Beitrag vom 25. Apr 2005
 
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

Re: Wie ermittelt man welche Komponenten in einem Package si

  Alt 22. Apr 2005, 15:35
Ersteinmal will ich mich für die viele Mühe bedanken:
Danke !!!

Zitat von negaH:
@Mabuse:
ok, das mein obiger Code nicht sofort funktioniert ist auch logisch, ich habe ihn hier einfach aus dem gedächtnis eingehämmert, da kann man sich mal irren. Öfters komme ich mit den verschiedenen aber ähnlichen Sprachen durcheinander. Zb. gerade jetzt arbeite ich mit VHDL und dieses ist in der Syntax ähnlich wie PASCAL aber eben nicht gleich, da kostet es schon Anstrengung das if then nicht als if end if; oder das case of end; nicht als case is when end case; zu schreiben sorry also:
Das dachte ich mir, und deshalb habe ich ihn ja angepasst, ich wollte nur wissen, ob ich es richtig gemacht habe

Zitat von negaH:
dieser Code funktioniert bei mir super, und er extrahiert sogar noch den Unit Namen ohne deinen Trick:

...Quellcode...

Wie du auch siehst ist die Deklaration von TEnumModuleFunc durch Borland sehr unglücklich erfolgt. Besser wäre es wie in meiner Deklaration den UserData Paramater als ersten Parameter der Callback zu benutzen. So kann man nämlich diese Callbacks ohne Probleme als Methoden-Callback eines Objectes benutzen. Dazu muß UserData eben nur Self enthalten.

Angezeigt wird zb. nachfolgendes:

Code:
TForm1                                  : tkClass            , Project1.exe->Unit1
HWND                                   : tkInteger          , vcl70.bpl->
TOwnerDrawState                        : tkSet              , vcl70.bpl->
TColor                                 : tkInteger          , vcl70.bpl->
EInvalidGraphic                        : tkClass            , vcl70.bpl->Graphics
...
Bei mir zeigt er alles im Kontext von Projekt1.exe an.

Code:
Boolean                                : tkEnumeration      , Project1.exe->
Char                                   : tkChar             , Project1.exe->
Integer                                : tkInteger          , Project1.exe->
Byte                                   : tkInteger          , Project1.exe->
Word                                   : tkInteger          , Project1.exe->
Cardinal                               : tkInteger          , Project1.exe->
String                                 : tkLString          , Project1.exe->
TObject                                : tkClass            , Project1.exe->System
IInterface                             : tkInterface        , Project1.exe->System
TOwnerDrawState                        : tkSet              , Project1.exe->
TErrorRec                              : tkRecord           , Project1.exe->
TExceptRec                             : tkRecord           , Project1.exe->
TCustomVariantType                     : tkClass            , Project1.exe->Variants
TTypeKind                              : tkEnumeration      , Project1.exe->
TAlignment                             : tkEnumeration      , Project1.exe->
TBiDiMode                              : tkEnumeration      , Project1.exe->
TShiftState                            : tkSet              , Project1.exe->
THelpContext                           : tkInteger          , Project1.exe->
THelpType                              : tkEnumeration      , Project1.exe->
TShortCut                              : tkInteger          , Project1.exe->
TNotifyEvent                           : tkMethod           , Project1.exe->
TPersistent                            : tkClass            , Project1.exe->Classes
TInterfacedPersistent                  : tkClass            , Project1.exe->Classes
IStringsAdapter                        : tkInterface        , Project1.exe->Classes
TStrings                               : tkClass            , Project1.exe->Classes
TStringItem                            : tkRecord           , Project1.exe->
TStringList                            : tkClass            , Project1.exe->Classes
TComponentName                         : tkLString          , Project1.exe->
IDesignerNotify                        : tkInterface        , Project1.exe->Classes
TComponent                             : tkClass            , Project1.exe->Classes
TBasicAction                           : tkClass            , Project1.exe->Classes
TIdentMapEntry                         : tkRecord           , Project1.exe->
TColor                                 : tkInteger          , Project1.exe->
TFontPitch                             : tkEnumeration      , Project1.exe->
TFontName                              : tkLString          , Project1.exe->
...
THelpEvent                             : tkMethod           , Project1.exe->
TCustomForm                            : tkClass            , Project1.exe->Forms
TForm                                  : tkClass            , Project1.exe->Forms
TCustomDockForm                        : tkClass            , Project1.exe->Forms
TScreen                                : tkClass            , Project1.exe->Forms
THintInfo                              : tkRecord           , Project1.exe->
TApplication                           : tkClass            , Project1.exe->Forms
TForm2                                  : tkClass            , Project1.exe->Unit2
TForm1                                  : tkClass            , Project1.exe->Unit1
Ich versuche im Programm eine BPL zu laden.
  LoadPackage('c:\Programme\Borland\Delphi7\Bin\dclSockets70.bpl'); Diese BPL will ich nun untersuchen.

Die erscheint in obiger Liste gar nicht, obwohl sie doch geladen wurde.

Aber ich glaube wir haben etwas aneinander vorbei geredet (geschrieben ):

Die BPL ist nicht in mein Programm (Listing 1. Beitrag) compiliert.
(Sie wird via TOpenDialog zur Laufzeit ausgewählt)

Mit GetPackageDescription bekomme ich die Beschreibung
(z.B. bei dclSockets70.bpl: "Borland Socket-Komponenten")

Mit GetPackageInfo bekomme ich die von dem Package benötigten Packages
(z.B. bei dclSockets70.bpl: "rtl70.bpl")

Mit GetPackageInfo bekomme ich die von dem Package benutzten Units (dcu Dateien)
(z.B. bei dclSockets70.bpl: "dclsockets, SocketsReg, SysInit")

In der Callback Prozedur ermittele ich auch noch ob eine "procedure Register;" vorhanden ist
(z.B. bei dclSockets70.bpl: "SocketsReg.Register;")

Die DelphiIDE ruft diese Register Prozedur auf und initialisiert damit die Komponenten.
(z.B.
Delphi-Quellcode:
procedure Register;
begin
  RegisterComponents('Internet', [TClientSocket, TServerSocket]);
end;
)

Ich will also ein beliebiges Package öffnen und ermitteln welche Komponenten dort drin sind.

Mein Tool gibt nun folgendes aus:
Code:
Dateiname: c:\Programme\Borland\Delphi7\Bin\dclsockets70.bpl
  Package Name: Borland Socket-Komponenten
  Flags: 00 - benötigt Package: rtl70.bpl
  Flags: 03 - Unit: dclsockets
  Flags: 00 - Unit: SocketsReg
               SocketsReg.Register;
  Flags: 00 - Unit: SysInit
  Flags: 00 - PackageName: dclsockets
Was mit fehlt ist nun das in der dclSockets70.bpl folgende Komponenten enthalten sind:
Code:
TClientSocket, TServerSocket
Hat jemand eine Idee?
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
 


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 14:20 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 by Thomas Breitkreuz