Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Package erstellen und verwenden (https://www.delphipraxis.net/94358-package-erstellen-und-verwenden.html)

Helmi 20. Jun 2007 13:40


Package erstellen und verwenden
 
Hallo,

da ich mich gestern entschlossen habe, ein Programm von mir erweitern, dacht ich mir ich könne dies ja "modular" aufbauen. D. h. bpl vorhanden = funktion möglich, bpl nicht vorhanden = funktion nicht möglich

Lider weiss ich nicht wie man bpl´s erstellt und verwendet - hab auch nix gscheits in der suche gefunden

gibt es dafür eine gute Anleitung?

Phoenix 20. Jun 2007 13:42

Re: Package erstellen und verwenden
 
Datei -> Neu -> Weitere -> Package

Helmi 20. Jun 2007 13:45

Re: Package erstellen und verwenden
 
Zitat:

Zitat von Phoenix
Datei -> Neu -> Weitere -> Package

na ja - das ist nur so hingeworfen!

Aber wie verwendet man diese?
Ich möcht die ja im Code aufrufen etc.

Phoenix 20. Jun 2007 13:51

Re: Package erstellen und verwenden
 
Hrm. Keine Ahnung. ;-)

Aber schau mal hier nach: http://entwickler-forum.de/showthread.php?t=28212
Dürfte in die richtige Richtung gehen.

Helmi 20. Jun 2007 14:24

Re: Package erstellen und verwenden
 
mmh - bringt mich auch nicht wirklich weiter

mkinzler 20. Jun 2007 14:30

Re: Package erstellen und verwenden
 
http://dn.codegear.com/sv/article/27178

Helmi 22. Jun 2007 11:53

Re: Package erstellen und verwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, da bin ich wieder :-)

Ich hab jetzt mal das Beispiel von mkinzler getestet.
Leider funktionierts nicht so richtig.

Mein Test-Programm ist angehängt. Dabei befindet sich auch die Package.

Mein Problem ist hier:
Delphi-Quellcode:
AClass := GetClass('TForm2');
Das Package wird gefunden, aber keine Klasse "TForm2".
AClass ist also nil.

Kann mir jemand helfen wieso weshalb und warum das so ist? :angel2:

mkinzler 22. Jun 2007 11:55

Re: Package erstellen und verwenden
 
Zitat:

Mein Test-Programm ist angehängt. Dabei befindet sich auch die Package.
Hast du wohl vergessen

Helmi 22. Jun 2007 11:59

Re: Package erstellen und verwenden
 
Zitat:

Zitat von mkinzler
Zitat:

Mein Test-Programm ist angehängt. Dabei befindet sich auch die Package.
Hast du wohl vergessen

Verzeihung!! :oops:

Das Alter :mrgreen:

Das Beispielprogramm ist im letzten post

mkinzler 22. Jun 2007 12:18

Re: Package erstellen und verwenden
 
Zitat:

Make sure you compile any project that uses packages (static or dynamic) with runtime packages turned on: "Project | Options | Packages | Build with runtime packages."

You must be careful that when you unload a package you destroy any objects using those classes and un-register any classes that were registered.

Helmi 22. Jun 2007 12:22

Re: Package erstellen und verwenden
 
versteh ich jetzt inhaltlich ned

ich hab doch keine objekte

mkinzler 22. Jun 2007 12:28

Re: Package erstellen und verwenden
 
Eigentlich ist der erste Satz bedeutend.
Die Formklasse, welche du erzeugst ist auch ein Objekt

Helmi 22. Jun 2007 12:33

Re: Package erstellen und verwenden
 
und was muss ich jetzt ändern?

mkinzler 22. Jun 2007 12:39

Re: Package erstellen und verwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Den Haken setzen

Helmi 22. Jun 2007 12:50

Re: Package erstellen und verwenden
 
ah - wunderbar

danke!

Helmi 22. Jun 2007 13:36

Re: Package erstellen und verwenden
 
Ich hätt da noch eine Frage:

Bei dem obigen Beispiel wird ja eine Form angezeigt.

Ich möcht nun aber folgendes machen:

In ein vorhandenes Projekt möcht ich eine Funktion hinzufügen, die in einem Package hinterlegt ist (es handelt sich um einen Rave-Report).

Da man aber für einen Rave-Report keine Form braucht, dacht ich mir, ich erstelle nur eine Unit, bastel mir ein Create und einen Destructor und arbeite da drin mit den Komponenten.

Findet das MainProgramm die bpl dann wird die funktion durchgeführt.

Mein Problem ist, nun dieses alles zu programmieren.

Ich dacht mir ich bastel einfach eine Unit, nämlich so:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Classes;

type
  TTest = class(TComponent)

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create;
    destructor Destroy;
  end;

implementation

constructor TTest.Create;
var
  S: String;

begin
  //
  S := 'hallo';
end;

destructor TTest.Destroy;
begin
//
  inherited;
end;

initialization
  RegisterClass(TTest);

finalization
  UnRegisterClass(TTest);

end.
Und so aufgerufen im Mainprogramm:
Delphi-Quellcode:
var
  PackageModule : HModule;
  AClass       : TPersistentClass;
  Datei        : String;

begin
  Datei := ExtractFilePath(Application.ExeName) + 'Package1.bpl';

  If not FileExists(Datei) then
    begin
      ShowMessage(Datei + ' nicht vorhanden!');

      exit;
    end;

  PackageModule := LoadPackage(Datei);
  If PackageModule <> 0 then
    begin
      AClass := GetClass('TTest');

      If Assigned(AClass) then
        with TComponentClass(AClass).Create(Application) as TComponent do
          begin
//            ShowModal;
            Free;
          end;

      UnloadPackage(PackageModule);
    end;
Nur glaub ich, dass ich mich in irgendwas verrenne!

Kann mir jemand einen Tip geben, ob ich auf dem richtigen weg bin und falls nciht, wie man es richtig macht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 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