AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen in DLL

Ein Thema von RWarnecke · begonnen am 18. Sep 2008 · letzter Beitrag vom 22. Sep 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Klassen in DLL

  Alt 18. Sep 2008, 15:26
Hallo zusammen,

ich habe vor verschiedenste Klassen, die ich programmiert habe, in eine DLL zu packen. Ich habe schon ein bisschen im I-Net recherchiert. So einfach wie die Unit einbinden ist es ja nicht. Die Grundstruktur zum Einbinden habe ich hier schon im Entwicklerforum gefunden.

Dazu meine Frage, wenn ich jetzt mich an die Beschreibung halte, gibt es da irgendwelche größeren Stolpersteine ? Oder sollte ich besser Funktionen schreiben, die mir die einzelnen Werte von den Klassen zurückgeben ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Klassen in DLL

  Alt 18. Sep 2008, 21:23
Und warum dann nicht gleich über Interfaces, wenn man schon über rein abstrakte Klassen nachdenkt?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Klassen in DLL

  Alt 19. Sep 2008, 08:36
Zitat von sirius:
Und warum dann nicht gleich über Interfaces, wenn man schon über rein abstrakte Klassen nachdenkt?
Was ist der Vorteil und Nachteil Interfaces vs. abstrakte Klassen ? Mit Interfaces habe ich noch nicht gearbeitet. Hast Du da zufällig Links mit Tutorials zur Hand, wo ich mich einlesen kann ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: Klassen in DLL

  Alt 19. Sep 2008, 08:45
Guten Morgen Rolf,

ich bin zwar nicht Sirius, aber hier ist eine kleine Anfänger-Einführung in Interfaces zu finden:

http://mwcs.de/tutinterfaces.html

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Klassen in DLL

  Alt 19. Sep 2008, 09:45
Zitat von Assertor:
Guten Morgen Rolf,

ich bin zwar nicht Sirius, aber hier ist eine kleine Anfänger-Einführung in Interfaces zu finden:

http://mwcs.de/tutinterfaces.html

Gruß Assertor
Danke Assertor, werde das mal durcharbeiten. Wenn jemand noch weitere Tutorials kennt, bitte melden, damit ich so viel Info wie möglich bekomme.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Klassen in DLL

  Alt 21. Sep 2008, 11:27
Eine mögliche Vorgehensweise (noch ohne COM):
Delphi-Quellcode:
//Unit mit Interface-Deklaration für beide Programmteile:
type ImyInterface=interface
       ['{C55C5E2B-CC7D-4B8F-97BC-AB2A66EAAA33}'] //erstellen mittels [strg]+[shift]+[g]
       procedure doSomething;
       
       procedure setx(value:Integer);
       function getx:Integer;
       property x:Integer read getx write setx;
     end;
Delphi-Quellcode:
Nur in der DLL dann eine Klasse dazu implementieren:
type TmyInterfaceClass=class(TInterfacedObject,ImyInterface)
       //Hier jetzt die (3) Methoden von oben implementieren
       //zusätzlich können noch weitere Methoden und Felder in der Klasse sein,
     end;
     //du kannst jetzt auch weitere Klassen über dasselbe Interface implementieren

//und eine Funktion schreiben, welche das Interface liefert:
function getIntf:IUnknown;
begin
  result:=TmyInterfaceClass.create;
end;
Delphi-Quellcode:
//in der Exe bekommst du die Klasse dann mittels:
var intf:ImyInterface;
begin
  intf:=getIntf as ImyInterface;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Klassen in DLL

  Alt 21. Sep 2008, 12:55
Zitat:
Eine mögliche Vorgehensweise (noch ohne COM):
Frage mich warum das in Delphi so kompliziert ist ein Klasse für den zugriff von außen zu instanzieren.
In VB erstelle ich ein öffentliche Klasse ganz einfach.. ohne mich mit Interface-Deklaration rumzuschlagen.
Dll 'GenInterface' erstellen dort alle funktionen die ich in anderen Projekten verwenden will öffentlich machen.

Beispiel:
Delphi-Quellcode:
Public Property Get EQVisible() As Boolean
//
End Property

Public Property Let EQVisible(ByVal sEQVisible As Boolean)
//
End Property

Public Sub Execute(ByVal lngHwnd As Long)
//
End Sub

Public Function GetPlaylistBColor(ByVal mColor As OLE_COLOR) As OLE_COLOR
//
End Function

Public Function GetPlaylistFColor(ByVal mColor As OLE_COLOR) As OLE_COLOR
//
End Function
Das wars dann schon..
Nachher muss ich diese DLL als Interfacebrücke nur noch in meine Anwendung als Verweis einbinden.
Die Plugins welche dann mit meiner Anwendung kommunizieren sollen
müssen dann nur eine MasterClass besitzen bsp .. clsMain
Dort implementiere ich das Interface natürlich auch in der Anwendung.
Implements GenInterface.IPluginGen Dort werden dann alle Funktionen (vererbungen des GenInterface) erneute deklariert.
Und dann kann man zwischen 'Anwendung <GenInterface > Plugin' kommunizieren
Delphi-Quellcode:
Private Property Get IPluginGen_EQVisible() As Boolean
    IPluginGen_EQVisible = EQVis
End Property

Private Property Let IPluginGen_EQVisible(ByVal sEQVisible As Boolean)
    EQVis = sEQVisible
End Property

Private Sub IPluginGen_Execute(ByVal lngHwnd As Long)
    Load frmBrowser
End Sub

Private Function IPluginGen_GetPlaylistBColor(ByVal mColor As stdole.OLE_COLOR) As stdole.OLE_COLOR
    mBackColor = mColor
    getColor = True
End Function

Private Function IPluginGen_GetPlaylistFColor(ByVal mColor As stdole.OLE_COLOR) As stdole.OLE_COLOR
    mForeColor = mColor
End Function
Also warum ist das in Delphi so kompliziert?

EDIT:
Jede Anwendung die nun über die clsMain verfügt und das GenInterface als
Verweis einbindet kann nun mit meiner Anendung kommunizieren ohne
das sie die Interface-Bezeichnung (['{C55C5E2B-CC7D-4B8F-97BC-AB2A66EAAA33}']) kennen muss

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Klassen in DLL

  Alt 21. Sep 2008, 13:00
Du kannst auch mit Packages arbeiten dann ist es ebenfalls so einfach. Wenn du allerdings DLLs verwendest und nicht das vorgefertigte musst du alles von Hand machen.
Warum ist das nicht so einfach: Weil die DLL und die Hauptanwendung im Normallfall ihre eigene Speicherverwaltung haben. Wenn du also mit Strings etc. hantierst muss man immer bedenken das reservierter Speicher dort frei gegeben wird wo er angefordert wurde etc.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Klassen in DLL

  Alt 21. Sep 2008, 13:08
(Add zu Sir)
Außerdem kann man in Delphi auch alles über COM machen. Da wird man von der IDE in allem unterstützt.

Abgesehen davon habe ich jetzt nicht verstanden, wo genau die Vereinfachung in VB liegt
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: Klassen in DLL

  Alt 21. Sep 2008, 13:11
Zitat von sirius:
(Add zu Sir)
Außerdem kann man in Delphi auch alles über COM machen. Da wird man von der IDE in allem unterstützt.

Abgesehen davon habe ich jetzt nicht verstanden, wo genau die Vereinfachung in VB liegt
Ganz einfach das die GenInterface.dll als Brücke zwichen Anwenung .. und Plugin sprich anderer ExeAnwendung fungiert
Was versteht man da nicht

Brauche keine Com keine Interface Deklaration oder ähnliches.
Und muss auch nicht das Interface als solches kennen.
Zitat:
(['{C55C5E2B-CC7D-4B8F-97BC-AB2A66EAAA33}'])
Edit:
Sobald das Interface implementiert ist
kenne ich alle Funktionen Propertys proceduren ohne das ich mich weiter in die API
des Interface einarbeiten muss.
Und zwar in jeder Anwendung Dll oder Exe spielt dabei keine rolle.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:59 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