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 2 von 3     12 3      
Benutzerbild von sirius
sirius

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

Re: Klassen in DLL

  Alt 21. Sep 2008, 14:16
Und was mache ich, wenn ich die DLL aus VB in meinem Delphi einbinden will?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Klassen in DLL

  Alt 21. Sep 2008, 14:18
Zitat von sirius:
Und was mache ich, wenn ich die DLL aus VB in meinem Delphi einbinden will?
Dann bindest du sie als verweis ein und fertig
Das geht mit C mit NET warum nicht auch mit Delphi
Notfalls mit LoadLibrary

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Klassen in DLL

  Alt 21. Sep 2008, 14:25
Zitat von EWeiss:
Frage mich warum das in Delphi so kompliziert ist ein Klasse für den zugriff von außen zu instanzieren.
Mir runtimepackages hat man ähnliche einfachheit. Bei VB läuft alles über COM mit der bekannt/berüchtigten DLL/COM-Hölle. Seit XP ist das zwar einfacher da man per Side-By-Side Registrierung arbeiten kann, aber das Grundübel besteht immer noch.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: Klassen in DLL

  Alt 21. Sep 2008, 15:45
Dann zeig mal ein Beispiel...
Nur Interesse halber hier ist meins ..
Extra klein VB mit Delphi formatiert hehhehehe...
"Form Main"
Delphi-Quellcode:
Option Explicit

Dim objPerson As IPerson

Private Sub Create_Click()
    On Error Resume Next

    objPerson = Nothing
    Set objPerson = CreatePerson(cmbPerson.ListIndex)
    objPerson.GebDatum = CDate(Text1.Text)
    objPerson.Name = Text2.Text

    objPerson.Sprich
End Sub

Private Sub Form_Load()
    cmbPerson.AddItem "Baby"
    cmbPerson.AddItem "Student"
    cmbPerson.ListIndex = 0
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set objPerson = Nothing
End Sub
"Bas"
Delphi-Quellcode:
Option Explicit

Public Enum PersonType
   Baby = 0
   Student = 1
End Enum

Public Function CreatePerson(ByVal ptPerson As PersonType) As IPerson
                                 
    Select Case ptPerson
        Case Baby
            Dim objBaby As cBaby
            Set objBaby = New cBaby
            objBaby.WindelVoll
            Set CreatePerson = objBaby
        Case Student
            Dim objStudent As cStudent
            Set objStudent = New cStudent
            objStudent.Betrunken
            Set CreatePerson = objStudent
    End Select
    
End Function
Exe Fertig !

Die Interface Schnittstelle person ..
"Class"
Delphi-Quellcode:
Option Explicit

Public Property Let GebDatum(ByVal dNew As Date)
End Property

Public Property Get GebDatum() As Date
End Property

Public Property Let Name(ByVal sNew As String)
End Property

Public Property Get Name() As String
End Property

Public Function Sprich() As String
End Function
fertig.
Nun das Baby
Delphi-Quellcode:
Option Explicit

Implements IPerson

Private md_GebDate As Date
Private ms_Name As String

Private Sub Class_Initialize()
    MsgBox "Baby geboren"
End Sub

Private Sub Class_Terminate()
    MsgBox "Baby 'zerstört' ;)"
End Sub

Private Property Get IPerson_GebDatum() As Date
    IPerson_GebDatum = md_GebDate
End Property

Private Property Let IPerson_GebDatum(ByVal RHS As Date)
    md_GebDate = RHS
End Property

Private Property Let IPerson_Name(ByVal RHS As String)
    ms_Name = RHS
End Property

Private Property Get IPerson_Name() As String
    IPerson_Name = ms_Name
End Property

Private Function IPerson_Sprich() As String
    MsgBox "Ich heisse " & ms_Name & " und bin am " & md_GebDate & " geboren worden"
End Function

//zur Demonstration, das diese Klasse die Vererbten Methoden und Attribute
//beinhaltet, aber auch spezifische Sachen, nur die Klasse betreffend
Public Function WindelVoll()
    MsgBox "Meine Windel is voll. Bitte einmal wechseln"
End Function
Baby als Plugin fertig
Student
Delphi-Quellcode:
Option Explicit

Implements IPerson

Private md_GebDate As Date
Private ms_Name As String

Private Sub Class_Initialize()
    MsgBox "An der Uni eingeschrieben"
End Sub

Private Sub Class_Terminate()
    MsgBox "Verdammt. Schon wieder rausgeflogen"
End Sub

Private Property Get IPerson_GebDatum() As Date
    IPerson_GebDatum = md_GebDate
End Property

Private Property Let IPerson_GebDatum(ByVal RHS As Date)
    md_GebDate = RHS
End Property

Private Property Let IPerson_Name(ByVal RHS As String)
    ms_Name = RHS
End Property

Private Property Get IPerson_Name() As String
    IPerson_Name = ms_Name
End Property

Private Function IPerson_Sprich() As String
    MsgBox "Ich heisse " & ms_Name & " und bin am " & md_GebDate & " geboren worden"
End Function

//zur Demonstration, das diese Klasse die Vererbten Methoden und Attribute
//beinhaltet, aber auch spezifische Sachen, nur die Klasse betreffend
Public Function Betrunken()
    MsgBox "Boah war die letzte Party übel. Ich glaub ich kotz gleich"
End Function
fertig ...
Jetzt mach das in Delphi ein komplettes Interface mit Plugin support...
Ich behaupte das du mehr an Aufwand betreiben mußt und es so einfach in Delphi nicht geht !!!

gruss Emil
Angehängte Dateien
Dateityp: rar interfaces_beispiel_122.rar (22,3 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Klassen in DLL

  Alt 21. Sep 2008, 17:10
Hier mal mein Vorschlag...
Angehängte Dateien
Dateityp: zip interface_128.zip (3,4 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Klassen in DLL

  Alt 21. Sep 2008, 17:40
Zitat von omata:
Hier mal mein Vorschlag...
Nicht schlecht aber auch nicht das gleiche ?

Viel mehr Code keine eigenständige DLL in dem sinne wie ich es ausgeführt habe.
Baby und Student sind eigenständige Dll's quasi Plugins und können
unabhängig von deiner Exe erweitert werden zum bsp. noch nen Opa dazu.

Die von dir erstellten Klassen werden nicht von außerhalb angesprochen.
trotzdem fein gemacht..

gruss Emil
  Mit Zitat antworten Zitat
Alt 21. Sep 2008, 17:44     Erstellt von EWeiss
Dieser Beitrag wurde von Matze gelöscht. - Grund: Doppelpost
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Klassen in DLL

  Alt 21. Sep 2008, 17:50
Ok, neuer Vorschlag...
Angehängte Dateien
Dateityp: zip dllinterface_171.zip (4,0 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Klassen in DLL

  Alt 21. Sep 2008, 18:01
Zitat von omata:
Ok, neuer Vorschlag...
Na ja fast
Schmeiß die unit BabyU.pas und StudentU.pas aus dem Exe Projekt raus dann stimmt es in etwa.
Wo ich drauf hinaus wollte ist das man unter Delphi einiges an Code mehr benötigt
und der aufbau nicht so simple ist wie in VB.

Und das hat sich ja bestätigt

Die IPersonU ist Hauptsächlich dafür da das man unter VB alle eigenschafte (vererbungen) im Intelisense zur verfügung hat.
Nur so neben bei als Information.

gruss Emil
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Klassen in DLL

  Alt 21. Sep 2008, 18:38
Zitat von EWeiss:
Schmeiß die unit BabyU.pas und StudentU.pas aus dem Exe Projekt raus dann stimmt es in etwa.
Ja, genau die Überlegung hatte ich auch. Dann wurde mir allerdings etwas klar...

Wenn ich eine Anwendung habe, die eine DLL benutzt dann kann ich innerhalb der DLL den Code anpassen und erweitern. Neue Funktionen kann ich dabei auch hinzufügen. Allerdings kennt meine alte Anwendung die neuen Funktionen ja nicht. Wie auch, als sie entstand existierten diese ja nicht. Deshalb die Frage: Wie soll das in VB gehen? Etwas was ich nicht kenne kann ich nicht aufrufen. Deshalb ist es ok, wenn ich die beiden Units in der Anwendung kenne. Oder nicht?

Zitat von EWeiss:
Wo ich drauf hinaus wollte ist das man unter Delphi einiges an Code mehr benötigt
und der aufbau nicht so simple ist wie in VB.

Und das hat sich ja bestätigt
Also das sehe ich jetzt nicht so bestätigt. Wo habe ich den wesentlich mehr Code geschrieben?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Klassen in DLL

  Alt 21. Sep 2008, 19:17
Zitat:
Wenn ich eine Anwendung habe, die eine DLL benutzt dann kann ich innerhalb der DLL den Code anpassen und erweitern. Neue Funktionen kann ich dabei auch hinzufügen. Allerdings kennt meine alte Anwendung die neuen Funktionen ja nicht. Wie auch, als sie entstand existierten diese ja nicht. Deshalb die Frage: Wie soll das in VB gehen? Etwas was ich nicht kenne kann ich nicht aufrufen. Deshalb ist es ok, wenn ich die beiden Units in der Anwendung kenne. Oder nicht?
Du kannst keine Unit's addieren die deiner anwendung nicht bekannt sind.
Baby.dll hat Emil geschrieben die Anwendung von Omata kennt diese aber nicht ..
Wie willst du sie dann addieren ?
Beide kennen wir nur das Interface IPersonU

Nein kannst du nicht!
Ein Plugin ist nur soweit erweiterbar wie die Class IPersonU das zuläßt
Alles darüber hinaus würde fehlschlagen da es in deiner Anwendung nicht verarbeitet wird.

Anwendung und DLL's sind abhängig vom Interface IPersonU
Willst du also neue Dinge hinzufügen geht das nur wenn diese von IPersonU
nach außen freigegeben werden und die neuen Funktionen bzw.. die geänderte Unit im jeweiligen Quelltext übernommen wird
also in jeder DLL und der anwendung aktualisiert wird.

Jedes Programm kann dann die IPersonU einbinden und mit deiner Anwendung kommunizieren. bzw.. die Plugins verwenden.

Zitat:
Also das sehe ich jetzt nicht so bestätigt. Wo habe ich den wesentlich mehr Code geschrieben?
Na ja wollen wir nicht so kleinlich sein.

Meine komplette Anwendung kompiliert verwendet gepackt 22.5KB incl.. Source
Deine 1,2MB gut du hast die Runtime drin .. ohne Source
Auch habe ich keinerlei zusätzliche klassen einbinden müssen.

EDIT:
Auch das einbinden der IPersonU ist eigentlich nicht OK!
Diese ist nämlich ebenfalls eine eigenständige Datei(DLL) also ein Wrapper zwischen deiner Anwendung
und den Dll's welche sie verwenden du darfst also nur das interface von IPersonU einbinden nicht
die komplette Unit.

Interface schreibt PersonX
Ich die DLL und du die Anwendung.
Wird das interface geändert bekommt dieses eine neue GUID und du mußt
deine Anwenung daraufhin anpassen so wie ich meine DLL
Zitat:
Allerdings kennt meine alte Anwendung die neuen Funktionen ja nicht.
Nun kennt deine alte Anwendung die Funktionen auch.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:17 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