![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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