![]() |
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:
Hier schon das erste problem. Sender steht ja nicht zur verfügung
BassVisMain.Create(Sender);
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:
Generell die frage ob sowas in DLL's überhaupt möglich ist.
procedure LibraryProc(Reason: integer);
begin case (Reason) of DLL_PROCESS_ATTACH: begin BassVisMain.Create(Sender); Wenn ja wie regel ich das mit 'Sender' gruss Emil |
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.
|
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: |
Re: DLL und Create
Zitat:
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 |
Re: DLL und Create
Zitat:
|
Re: DLL und Create
Zitat:
Zumindest nicht so wie ich es mache. gruss |
Re: DLL und Create
Was Elvis meint:
Delphi-Quellcode:
Habe ich dich in letzter Zeit zu sehr mit VB(S) verdorben? :zwinker:
var
fs: TFileStream; begin fs := TFileStream.Create(...); |
Re: DLL und Create
Zitat:
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 |
Re: DLL und Create
Delphi-Quellcode:
Was du wahrscheinlich gemacht hast:
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;
Delphi-Quellcode:
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.
var
fs: TFileStream; begin fs.Create(...); |
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 |
Re: DLL und Create
Ich habe nur die Klasse TFuileStream als Beispiel benutzt, um dir zu zeigen, wie man mit Klassen arbeitet und entsprechenden Objekte erzeugt. Das geht natürlich entsprechend mit deiner TBass-Dingsbums Klasse. ;)
|
Re: DLL und Create
Zitat:
Habe mich schon gefragt wo der zusammenhang sein soll. gruss |
Re: DLL und Create
Das initialisieren und die ausführung aus der Echse funktionieren jetzt.
Allerdings fehlt mir ein Handle was ich nicht so einfach übergeben kann. zwei fragen.. 1. TBASSVis.Create(AOwner: TComponent); Initialisieren tue ich es über die funktion von außen.
Delphi-Quellcode:
function BASS_WINAMPVIS_INIT: boolean; stdcall;
begin try BassVisMain1 := TBassVis.Create(nil); finally BassVisMain1.Free end; result := True; end;
Delphi-Quellcode:
Eigentlich müßte ja TBassVis.Create(nil); = TBassVis.Create(self); sein
BassVisMain1 : TBASSVis;
Geht aber nur wenn das Projekt als Echse ausgelegt ist. was ist Self ? kann ich da nicht das Handle der ausführenden anwendung übergeben? 2.Das gleiche hier! Wie komme ich an das Handle aus der Fremdanwendung und was ist das für eins? (AOwner as TWinControl).Handle; Scheint das Handle des Controls sein welches die Aktion ausführt beispiel das vom Start Button oder? gruss Emil |
Re: DLL und Create
Hallo Emil,
mit Self erhältst du innerhalb einer Methode eines Objektes eine Referenz auf die Objektinstanz. Das ist manchmal ganz schön um Namenskonflikte aufzulösen oder um bei der Erzeugung von child components sich selbst als Owner übergeben zu können. Self ist genau der gleiche Wert den du erhältst, wenn du das Ergebnis eines Konstruktors an eine Variable zuweist. Über die Variable kannst du von außen auf das Objekt zugreifen, über Self von innen. Freundliche Grüße |
Re: DLL und Create
Zitat:
Du kennst das ja. Habe jetzt aus BassVis eine EXE erstellt. Alles aber auch alles funktioniert einwandfrei. OpenGL Plugins usw... Jetzt muss ich das teil wieder in die DLL einbauen und schon gibts probleme weil sich da keine Form befindet. Und die funktionen von außerhalb aufgerufen werden müssen. Kann ja keine komplette classe/Object an die DLL übergeben. Bekomme langsam die Krise... Gruss Emil |
Re: DLL und Create
Delphi-Quellcode:
Self ist hier das TForm Objekt, also Form1. Meist lässt man es aber weg, es sei denn man will deutlich machen, dass man mit einer Objekt-Instanz des Objektes selber arbeitet.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Self.Caption := 'Kuckuck'; end; |
Re: DLL und Create
Zitat:
Is quasi das gleiche wie in VB 'Me' me.caption = "Mein Window-Caption Name" Jup jetzt klappt das ganze schon besser. Danke für die ausführliche beschreibung .. Gruss Emil |
Re: DLL und Create
In VB heißt das me? Nein, ist das süß. :love: :mrgreen:
PS: Der Vollständigkeithalber, in C++ heißt es this. |
Re: DLL und Create
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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