AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriff von Form auf Komponente der dll ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff von Form auf Komponente der dll ?

Ein Thema von Blamaster · begonnen am 17. Mai 2010 · letzter Beitrag vom 18. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 17:57
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 18:36
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
Markus Kinzler
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 21:14
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 21:22
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#5

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 21:55
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 22:00
Dann funktioniert das genauso wie bei einer Exe.
Markus Kinzler
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#7

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 22:08
Hi,

die Libary lässt sich aber nicht in die uses der Form aufnehmen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zugriff von Form auf Komponente der dll ?

  Alt 17. Mai 2010, 22:10
Nein aber diie andere Unit.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

Re: Zugriff von Form auf Komponente der dll ?

  Alt 18. Mai 2010, 06:37
Zitat von Blamaster:
aber es soll ja auch garnicht über die Modulgrenzen hinweg kommuniziert werden.
Nicht?
Klang irgendwie anders.
Zitat von Blamaster:
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.
Gut, wenn die Form auf die Komponente zugreifen soll, dann denkt man erstmal auch an eine VCL-Komponente.
Aber wenn du vom Programmcode (nicht direkt über die Form) zugreifen willst, dann ginge es schon leichter.
Zitat von Blamaster:
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.
Und hier klang es eben so, als wenn
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#10

Re: Zugriff von Form auf Komponente der dll ?

  Alt 18. Mai 2010, 15:04
Hi,

das war es immernoch nicht, aber Danke für deine Bemühungen

Zitat:
Und hier klang es eben so, als wenn
eine Form in der EXE
und 2 Forms + Komponente in der DLL
miteinander reden sollen.
2 Forms + Komponente in der DLL. Das Außenstehende Programm, welches Später mit der Exe arbeitet ist dabei nun an dieser Stelle völlig zu vernachlässigen.

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:
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.
Nun hat die eingebundene Form (Optional_window in 'Optional_window.pas' {Form2} ebend 2 Buttons und will damit diese Function hier nutzen:
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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