Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL und Create (https://www.delphipraxis.net/86269-dll-und-create.html)

EWeiss 11. Feb 2007 23:20


DLL und Create
 
ich möchte gerne eine Create function in meiner DLL integrieren weiss aber nicht ob das geht.

Beim start der Dll möchte ich in DLL_PROCESS_ATTACH:
einen aufruf einbauen der aktionen ausführt die nur einmal beim start initialisiert werden dürfen.

Hab mir das so gedacht

Delphi-Quellcode:
BassVisMain.Create(Sender);
Hier schon das erste problem. Sender steht ja nicht zur verfügung

Die Classe selber sieht so aus.

Delphi-Quellcode:
TBASSVis = class(TComponent)
private

public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
end;

Var
BassVisMain        : TBassVis;

implementation

constructor TBASSVis.Create(AOwner: TComponent);
begin

end;

destructor TBASSVis.Destroy;
begin

end;
Delphi-Quellcode:
  procedure LibraryProc(Reason: integer);
  begin
    case (Reason) of
      DLL_PROCESS_ATTACH:
      begin
      BassVisMain.Create(Sender);
Generell die frage ob sowas in DLL's überhaupt möglich ist.
Wenn ja wie regel ich das mit 'Sender'

gruss Emil

Luckie 11. Feb 2007 23:22

Re: DLL und Create
 
Natürlich kann Klassen in DLLs nutzen. Schwierig wird es nur, wenn man aus der DLL eine Klassenreferenz zurückgeben will. Bei deinem konkrten Problem, übergib einfach nil als Wert für den Sender.

Elvis 11. Feb 2007 23:24

Re: DLL und Create
 
Die Sections initialization und finalization sind deine Freunde hier.
Haben auch den Vorteil, das der Code auch dann nach läuft wenn er in die Echse gelinkt wird. :zwinker:

EWeiss 11. Feb 2007 23:24

Re: DLL und Create
 
Zitat:

Zitat von Luckie
Natürlich kann Klassen in DLLs nutzen. Schwierig wird es nur, wenn man aus der DLL eine Klassenreferenz zurückgeben will. Bei deinem konkrten Problem, übergib einfach nil als Wert für den Sender.

Ja woher soll ich das wissen ob das in DLL_PROCESS_ATTACH: funktioniert
Hätte ja sein können das sich die DLL recursive aufruft.

Werde es mal mit nil versuchen.

EDIT:

Habs versucht... EAC error Anwendung kann nicht gestartet werden.
Springt auch nicht in Create rein :roll:

gruss

Elvis 11. Feb 2007 23:28

Re: DLL und Create
 
Zitat:

Zitat von EWeiss
Habs versucht... EAC error Anwendung kann nicht gestartet werden.
Springt auch nicht in Create rein :roll:

Kann auch unmöglich so gehen wie du es vorhat, da du Create auf die Referenz deines Typen anwendest, anstatt auf deinen Typen. Außerdem legst du die Instanz nirgends ab, wodurch du sie auch nicht freigeben kannst.

EWeiss 11. Feb 2007 23:28

Re: DLL und Create
 
Zitat:

Zitat von Elvis
Die Sections initialization und finalization sind deine Freunde hier.
Haben auch den Vorteil, das der Code auch dann nach läuft wenn er in die Echse gelinkt wird. :zwinker:

Habe im Thread oben unter Edit schon geschrieben das funktioniert nicht :oops:
Zumindest nicht so wie ich es mache.

gruss

Luckie 11. Feb 2007 23:31

Re: DLL und Create
 
Was Elvis meint:
Delphi-Quellcode:
var
  fs: TFileStream;
begin
  fs := TFileStream.Create(...);
Habe ich dich in letzter Zeit zu sehr mit VB(S) verdorben? :zwinker:

EWeiss 11. Feb 2007 23:32

Re: DLL und Create
 
Zitat:

Zitat von Luckie
Was Elvis meint:
Delphi-Quellcode:
var
  fs: TFileStream;
begin
  fs := TFileStream.Create(...);
Habe ich dich in letzter Zeit zu sehr mit VB(S) verdorben? :zwinker:

Kannst du mir das bitte erklären ? Bin ja eigentlich VB'ler und lerne noch.
Wo und für was soll ich as einsetzen.

EDIT:
In der Form gibt es ja ein create event was beim start nur einmal ausgeführt wird
sowas will ich in die DLL einbauen.

gruss

Luckie 11. Feb 2007 23:39

Re: DLL und Create
 
Delphi-Quellcode:
var
  fs: TFileStream; // Variable vom Typ TFileStream deklarieren. Hier wird unsere Objekt-Refrenz abgelegt
begin
  fs := TFileStream.Create(...); // Objekt erzeugen und Objektreferenz sichern
  try
    fs.MethodeXY; // eine Methode der Klasse TFileStream aufrufen
  finally
    fs.Free; // Objekt wieder zerstören
  end;
Was du wahrscheinlich gemacht hast:
Delphi-Quellcode:
var
  fs: TFileStream;
begin
  fs.Create(...);
Du hast eine Methode einer Klasse benutzt, ohne vorher die Klasse zu instanzieren / anzulegen. Es ist zwar der Konstruktor aber der Rest läuft ins Leere.

EWeiss 11. Feb 2007 23:48

Re: DLL und Create
 
Ich habe mir mal den aufruf TFileStream.Create(...); angesehen
dieser erwartet eine übergabe eines string und Mode : word

Vielleicht bin ich auch zu blöd ???
Finde den zusammenhang mit der von mir oben aufgeführten funktion nicht.
Und wie ich damit kommunizieren soll das es funktioniert.

Das ist mir noch etwas zu hoch :oops:

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

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