Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Denkfehler in Dll und Komponente (https://www.delphipraxis.net/172268-denkfehler-dll-und-komponente.html)

ATS3788 21. Dez 2012 14:11

Denkfehler in Dll und Komponente
 
Denkfehler in Dll und Komponente

Delphi-Quellcode:

function BaseInit(FilePath : String; var h : HMODULE) : boolean;
  begin
   h := LoadLibraryEx(PChar(FilePath) , 0, 0);
Wenn ich das Objekt ( Komponente ) mit
xxx := txxx.create(self);
erstelle, wird die Library ohne Probleme initialisiert.

Wenn ich es mit der Komponente versuche kommt
der Fehler das die DLL nicht auf dem System Initialisiert wurde.

Martin Michael

PS
ist das verständlich ?

sirius 21. Dez 2012 14:14

AW: Denkfehler in Dll und Komponente
 
Zitat:

Zitat von ATS3788 (Beitrag 1196404)
ist das verständlich ?

Nö,

Was denn für eine Komponente? Du kannst dir ruhig Zeit lassen beim Fragen stellen und es ausführlich machen. Die Welt geht nicht unter.

blauweiss 21. Dez 2012 14:31

AW: Denkfehler in Dll und Komponente
 
Zitat:

Zitat von sirius (Beitrag 1196405)
Zitat:

Zitat von ATS3788 (Beitrag 1196404)
ist das verständlich ?

Nö,

Was denn für eine Komponente? Du kannst dir ruhig Zeit lassen beim Fragen stellen und es ausführlich machen. Die Welt geht nicht unter.

made my day :stupid:

ATS3788 21. Dez 2012 15:05

AW: Denkfehler in Dll und Komponente
 
OK
Dachte ich mir , nochmal
Ich schreibe mir eine Komponente einen Wrapper um Bass.dll usw.
Das klappt auch echt gut, wenn ich diese mit

Delphi-Quellcode:
_Bass : T_Bass.Create(self)
einbinde. Das ist aber nicht die Idee einer Komponente.

Nur wenn ich das Ding auf das TForm klatsche, wird
die DLL nicht geladen, weil
Delphi-Quellcode:
 if not (csDesigning in ComponentState) then begin
benutzt. Dann bekomme ich zwar keine Fehlermeldung und könnte die DLL
nachträglich initialisieren. Nur sind dann die Vorteile einer Komponente von dannen.

Meine Frage lautet also. Kann ich die DLL noch auf dem Entwurfsform
initialisieren oder geht das nicht.

Ist das verständlich :oops:

Bernhard Geyer 21. Dez 2012 15:11

AW: Denkfehler in Dll und Komponente
 
Willst du die DLL schon in der IDE verwenden (als Komponente auf Formular gelegt) muss die DLL für die IDE findbar sein.
Wenn du sie nur ins Projektverzeichnis kopierst wird die IDE diese DLL nicht finden.

Uwe Raabe 21. Dez 2012 15:48

AW: Denkfehler in Dll und Komponente
 
Zitat:

Zitat von ATS3788 (Beitrag 1196413)
Ich schreibe mir eine Komponente einen Wrapper um Bass.dll usw.
Das klappt auch echt gut, wenn ich diese mit

Delphi-Quellcode:
_Bass : T_Bass.Create(self)
einbinde. Das ist aber nicht die Idee einer Komponente.

Nur wenn ich das Ding auf das TForm klatsche, wird
die DLL nicht geladen, weil
Delphi-Quellcode:
 if not (csDesigning in ComponentState) then begin
benutzt. Dann bekomme ich zwar keine Fehlermeldung und könnte die DLL
nachträglich initialisieren. Nur sind dann die Vorteile einer Komponente von dannen.

Mach es doch so wie bei den verschiedenen Connection-Komponenten: Setze ein Active-Property, das bei Bedarf die Initialisierung vornimmt.

ATS3788 21. Dez 2012 16:09

AW: Denkfehler in Dll und Komponente
 
Genau
Bernhard Geyer
nur geht das und wenn wie ?

ATS3788 21. Dez 2012 16:12

AW: Denkfehler in Dll und Komponente
 
Dieser
Uwe Raabe
einfach und Genial.
Da zermürbe ich mir den Kopf
und misshandele "Create"
und komme nicht auf so was.

Danke.

Bernhard Geyer 21. Dez 2012 18:46

AW: Denkfehler in Dll und Komponente
 
Zitat:

Zitat von ATS3788 (Beitrag 1196426)
Genau
Bernhard Geyer
nur geht das und wenn wie ?

Am einfachsten die DLL nach System32 (bzw. SysWOW64) kopieren

ATS3788 22. Dez 2012 08:27

AW: Denkfehler in Dll und Komponente
 
Hallo
Danke Uwe Raabe
hat funktioniert :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.

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