![]() |
Zugriff von Form auf Komponente der dll ?
Hi,
ich habe eine dll in der 2 Forms eingebunden sind. Nun soll das Form auf die in der libary unit erstellte Komponente xy zugreifen können. Wie funktioniert das ? Im falle einer normalen Unit würde sich diese nun einfachin die Uses der Form aufnehmen, aber wie macht man das bei einer libary ? Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Es ist nicht möglich Delphi-Objekte im Interface einer Dll zu verwenden. Du musst die Verwaltung vollständig in der dll kapseln und im Interface (flache) Funktionen für den Zugriff deklarieren
|
Re: Zugriff von Form auf Komponente der dll ?
Hi,
hört sich extrem kompliziert an. Lässt sich das etwas besser umschreiben ? Die in die Dll eingebundenen Forms enthalten lediglich Buttons sie daraufhin mit einer ComPort Komponente feste Funktion ausführen sollen. Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Es gab in letzer Zeit mehrere Threads zu diesem Thema (VCL in einer DLL),
und man kann grundsätzlich erstmal nur eines sagen: > die VCL basiert auf Klassen > und Klassen kann man nicht über Modulgrenzen (EXE oder DLL) hinweg kommunizieren lassen, da jedes Modul seine eigene RTTI besitzt. dazu kommt dann noch der Speichermanager, wo auch jedes Modul seinen eigenen besitzt. Mehr dazu (und auch ein paar Lösungen) wurden dort schon mehrfach genannt. eine Lösung: BPLs (Packages) statt der DLLs weitere Sachen: Shared Memory (Klassen, Strings, dyn. Arrays werden über den Delphi-Speichermanager verwaltet, weswegen man sie nur schlecht im Verwaltungsbereich eines anderen SpeicherManagers bearbeiten kann) |
Re: Zugriff von Form auf Komponente der dll ?
Hi,
aber es soll ja auch garnicht über die Modulgrenzen hinweg kommuniziert werden. In der Dll selber erstelle ich ein nonvcl Komponente (ComPort Komponente). Jetzt habe ich noch 2 Forms in die Dll eingebunden. Eine der beiden Forms hat nun 2 Buttons und beim Klick soll der ComPort senden. Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Dann funktioniert das genauso wie bei einer Exe.
|
Re: Zugriff von Form auf Komponente der dll ?
Hi,
die Libary lässt sich aber nicht in die uses der Form aufnehmen. |
Re: Zugriff von Form auf Komponente der dll ?
Nein aber diie andere Unit.
|
Re: Zugriff von Form auf Komponente der dll ?
Zitat:
Klang irgendwie anders. Zitat:
Aber wenn du vom Programmcode (nicht direkt über die Form) zugreifen willst, dann ginge es schon leichter. Zitat:
eine Form in der EXE und 2 Forms + Komponente in der DLL miteinander reden sollen. Nja, du mußt dir einfach nur eine Schnittstelle aufbauen. - Also einen Satz von Funktionen/Prozeduren, in der DLL, mit welchen man die Komonente ansteuert - diese Funktionen werden nun exportiert. - In der EXE gibt es nun die Importe dieser Funktionen (welche viele oftmals in eine eigenständige Unit auslagern) - Nun kann die EXE also über die Importe auf die DLL-Funktionen und somit auch auf die Komponente zugreifen. |
Re: Zugriff von Form auf Komponente der dll ?
Hi,
das war es immernoch nicht, aber Danke für deine Bemühungen :) Zitat:
Betrachten wir die dll also als eigenstäniges komplettes Programm, so das die eigentliche .exe in der Dll später nur eine Startfunction aufruft und die Dll danach alleine für sich arbeitet. Ich muss nun doch mal ebend etwas Beispielscode geben.
Delphi-Quellcode:
Nun hat die eingebundene Form (Optional_window in 'Optional_window.pas' {Form2};) ebend 2 Buttons und will damit diese Function hier nutzen:
library DllExample;
uses SysUtils, Classes, ComServ, ComObj, OoMisc, AdPort, Dialogs, Windows, Forms, Optional_window in 'Optional_window.pas' {Form2}; {$R *.res} var ComPort: TApdComPort; Optionalwindow: TForm2; // Hilfs Functions // Dll Export Functions function Plugin_init(): Boolean; stdcall; begin ComPort := TApdComPort.Create(nil); Optionalwindow := TForm2.Create(Application); end; function Plugin_SendValue(value: string): boolean; stdcall; begin // Code zum senden der Werte end; function Plugin_show_additionalwindow(): Boolean; stdcall; begin Optionalwindow.ShowModal; end; exports Plugin_Sendvalue, Plugin_show_additionalwindow; begin Plugin_init; end. function Plugin_SendValue(value: string): boolean; stdcall; Und hier ist dann auch mein Problem. Im Falle eines Delphiprogramms und unter der Annahme DllExample ist eine Unit und keine Libary würde ich jetzt im ButtonOnClick der Optional_window auf UnitXYZ.Plugin_SendValue zugreifen können, was nun ja aber nicht geht da DllExample ebend keine Unit sondern eine libary ist. Ich hoffe mein Problem ist nun etwas deutlicher geworden. Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Du musst, wie in einem Projket einer exe einfach die Units einbinden. Ein Library-Projekt unterscheidet sich hier nicht von einem Exe-Projekt
|
Re: Zugriff von Form auf Komponente der dll ?
Ja aber im Normalfall würde ich dann nun DllExample in den Uses der Form Optional Window aufnehmen. Das geht aber nicht.
Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Wieso denn das? Du nimmst bei einer Exe ja auch die *.dpr nicht mit in die uses-Klausel auf.
|
Re: Zugriff von Form auf Komponente der dll ?
Genau das ist ja mein Problem.
Im Falle einer .exe Arbeite ich ja auch nicht mit der .dpr selber. Im falle der dll scheine ich es ja aber zu müssen wenn mann prgram XYZ mit libary XYZ gleichsetzen will. Im Falle einer normalen exe habe ich nunmal gleich die Unit des Hauptforms zur Hand und arbeit dort. Das ganze habe ich bei einer dll ja nun aber nicht. Ich habe doch oben einen Beispielcode gepostet. Kann keiner anhand des Codes erklären wie ich es schaffen kann die benötigte function aus dem OptinalForm aufzurufen ? Mfg Yannic |
Re: Zugriff von Form auf Komponente der dll ?
Dann schreib Dir doch eine Hostanwendung, die die Funktion aus der DLL aufruft. Diese kannst Du ja in der IDE zuweisen.
|
Re: Zugriff von Form auf Komponente der dll ?
Muss das ganze denn wirklich so komplziert sein ?
Es muss doch möglich sein innerhalb der eigenen Dll ohne großen Aufwand die eigenen functionen nutzen zu können. |
Re: Zugriff von Form auf Komponente der dll ?
Ist es auch! Aber du scheinst uns ja nicht zu glauben!
|
Re: Zugriff von Form auf Komponente der dll ?
Ich würde es ja gerne glauben. Ich komme nur einfach nicht hinter wie ihr es genau meint. :(
Lässt sich das ganze evtl. für dll Laien etwas einfacher umschreiben ? Müssen die Functionen aus der libary raus in eine eigene Unit die ich dann wiederum in der libary einbinde ? Danke das ihr noch nicht die nerven verloren habt ;) |
Re: Zugriff von Form auf Komponente der dll ?
Zitat:
Aber wie gesagt im Grundsatz unterscheidet sich eine DlL(ibrary) nicht von einem Programm. Die exportierten Funktionen müssen sich auch nicht in der Projektdatei(dpr) befinden |
Re: Zugriff von Form auf Komponente der dll ?
Zitat:
Jetzt läuft es Danke :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 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