![]() |
Re: Klassen in DLL
Und was mache ich, wenn ich die DLL aus VB in meinem Delphi einbinden will?
|
Re: Klassen in DLL
Zitat:
Das geht mit C mit NET warum nicht auch mit Delphi Notfalls mit LoadLibrary ;) gruss Emil |
Re: Klassen in DLL
Zitat:
|
Re: Klassen in DLL
Liste der Anhänge anzeigen (Anzahl: 1)
Dann zeig mal ein Beispiel...
Nur Interesse halber hier ist meins .. Extra klein ;) VB mit Delphi formatiert hehhehehe... "Form Main"
Delphi-Quellcode:
"Bas"
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
Delphi-Quellcode:
Exe Fertig !
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 Die Interface Schnittstelle person .. "Class"
Delphi-Quellcode:
fertig.
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 Nun das Baby
Delphi-Quellcode:
Baby als Plugin fertig
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 Student
Delphi-Quellcode:
fertig ...
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 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 |
Re: Klassen in DLL
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal mein Vorschlag...
|
Re: Klassen in DLL
Zitat:
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 |
Re: Klassen in DLL
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, neuer Vorschlag...
|
Re: Klassen in DLL
Zitat:
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 |
Re: Klassen in DLL
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? Zitat:
|
Re: Klassen in DLL
Zitat:
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:
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:
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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