Modul BaseClass (Modul als Objekt)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Wollte schon mein OOP-Precompiler auf Module umschreiben.
Stelle aber fest das es auch ohne Pre-Compiler zu lösen ist.

Mein Ziel ist es ohne viele neuen Schlüsselnamen ein Modul als ein Objekt zu programmieren . Ich glaube es ist mir gelungen.

Das Modul BaseClass bringt dazu alle erforderlichen Komponenten mit:
- Neue Klasse anlegen mit der BaseClass oder einer geerbten Klasse.
- Die Basisfunktion Object\Release() und Object\AddRef().
- Deklarierung von Aufruf Umgebung "Initalize" und "Dispose", auch bei Vererbung.
- Deklarierung von Methoden.

Es gibt nur wenige Regeln:
- Die Struktur für die Variablen (Properties) muss mit "Extends sBaseClass" oder mit "Extends sVererbung" definiert werden.
- Das Interface für die Methoden muss mit "Extends iBaseClass" oder mit "Extends iVererbung" definiert werden.
- Bei Vererbung muss die zu erbende Klasse eine BaseClass haben.

Update v1.07
- Bugfix FreeMutex

Update v1.08
- Die Klassen in der Procedure 'AddClass(...)' gekapselt
- Überprüfung der neuen Klasse in der Procedure 'AddClass(...)' erweitert
- Macros geändert da die Klassen nicht mehr global sind
- Geändert CheckInterface. Der Parameter wird nicht mehr benötigt
- Die Namen der Klassen sind nicht mehr 'Case Sensitive'

Update v1.10
- Geändert ClassName Management

Update v1.13
- CheckInterface optimiert

Update v1.15
- QueryInterface aktuallisiert

Update v1.16
- Update Method QueryInterface with default result for 'IUnknown'
- Optimize BaseClass

Modul_BaseClassSmall.pb

Code: Alles auswählen

; Siehe englisches Forum
Link zum englischen Forum :wink:
Beschreibung vom Modul BaseClassSmall

Update v1.13

Vorwort

Purebasic ist Procedure Orientiert. Unterstützt aber den Aufruf von Objekten.

Mein Ziel ist es nicht eine Objekt orientierte Sprache für Purebasic zu erstellen, sondern das anlegen von eigenen Objekten zu vereinfachen.
Für vollständige Unterstützung von Objekt orientierte Programmierung gibt es andere Programmiersprachen.

Bei machen Aufgaben ist es aber vom Vorteil diese objektorientiert anzulegen.
Hier gilt bei Purebasic der gleiche Aufwand wie zum Beispiel bei „C“.
Alles muss selber definiert und anlegen werden. Es müssen die Regeln für Objekte und der Funktionen und Methoden eingehalten werde.

1. Der erste Eintrag im Objekt ist immer der Zeiger auf die Tabelle mit den Methoden.
2. Der erste Parameter von den Methoden ist immer der Zeiger auf das eigene Objekt.

Klassen

Zum anlegen eines Objektes benötigt man ein Klasse.
Eine Klasse kann man auch den Datentyp eines Objekt nennen.
In diesen wird die Tabelle der Methoden (Funktionen) und der Attribute (Variablen) definiert.

Konstruktoren und Destruktoren

Konstruktoren sind Funktionen die beim anlegen des Objekt in einen definierten Zustand bringen und bei bedarf die erforderliche Ressourcen anlegen.
Destruktoren sind Funktionen die beim freigeben des Objekt die angelegen Ressourcen frei gibt.

Konstruktoren können auch Parameter haben, werden aber nicht von alle Programmiersprachen unterstützen.
Destruktoren haben keine Parameter.

Konstruktoren und Destruktoren haben keinen Rückgabewert.

Methode Super

Um eine Klasse oder auch Basisklasse genannt zu vererben, benötigt man eine Super Funktion welche die Methoden und Attribute an die Subklasse übergibt.
Hierzu gehören auch die Konstruktoren und Destruktoren der Basisklasse.
Bei mehrfache Vererbung kann es somit auch mehrere Konstruktoren und Destruktoren geben, die in der richtigen Reihenfolge aufgerufen werden müssen.

Interface

Interfaces definieren die Schnittstelle welche Methoden vorhanden sind oder vorhanden sein müssen.


Was unterstützt Purebasic

Purebasic unterstützt Interfaces und Attributen, sowie die Vererbung von Interfaces und Attributen

- Interface SubKlasse Extends BasisKlasse
- Structure SubAttribute Extends BasisAttribute

Aufruf der Methoden von dem Interfaces.


Was unterstützt das Modul BaseClassSmall

Anlegen und Verwalten von Klassen : NewClass(InterfaceName, …)
- Anlegen der Tabellen für Methoden, Konstruktoren und Destruktoren.
* Hinweis: Konstruktoren mit Parameter werden nicht unterstützt.
- Die Methode Super automatisiert.

Das Interface mit den Methoden von Typ IUnknown
- QueryInterface(*riid, *addr)
- AddRef()
- Release()

Die BasisAttribute mit der Struktur
- System\vTable : Zeiger auf die Methoden-Tabelle
- System\Self : Zeiger auf die Klasse mit den Tabellen der Methoden, Konstruktoren und Destruktoren.
- System\RefCount : Zähler zum schützen von dem Objekt
- System\Mutex : Mutex für asynchrone Bearbeitung vom dem Objekt

Zuweisung des Kontruktors : Macro AsInitializeObject(Name der Procedure)
Zuweisung des Destruktors : Macro AsDisposeObject(Name der Procedure)

Zuweisung der Methoden : Macro AsMethode(Name der Methode und Procedure)
Überschreiben der Methoden : Macro AsNewMethode(Name der Methode und Procedure)

Anlegen des Objekt : Macro InitObject oder AllocateObject/InitializeObject für die Procedure zum angelegen des Objekt
- Anlegen des Speichers für das Objekt.
- Zuweisung der Virtuellen Tabelle und Basis Attribute.
- Aufruf der Konstruktoren in der richtigen Reihenfolge.

Die Methode QueryInterface : Object\QuerInterface(*riid, *addr)
- Eine leere Methode mit den Rückgabewert #E_NOINTERFACE.
* Diese Methode kann bei bedarf überschrieben werden.

Die Methode AddRef : Object\AddRef()
- Erhöhung des Zählers des Objektes.
* Mit der Methode Release wird der Zähler reduziert und das Objekt wird erst freigegeben, wenn dieser Null erreicht hat.
! Nicht überschreiben !

Die Methode Release : Objekt\Release()
- Aufruf der Destruktoren in der richtigen Reihenfolge.
- Freigeben des Speichers.
! Nicht überschreiben !

Überprüfung der Klasse im Debugger-Modus
- CheckInterface() am Ende vom Modul aufrufen.
Zuletzt geändert von mk-soft am 08.02.2020 15:43, insgesamt 56-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (OOP)

Beitrag von mk-soft »

Beispiel

Code: Alles auswählen

;-TOP

; Example 1

IncludeFile "Modul_BaseClassSmall.pb"

; Erste Klasse

DeclareModule MyMath1
  
  ;UseModule BaseClass
  
  Structure sMyMath1 Extends BaseClass::sBaseClass
    Value.i
  EndStructure
  
  Interface iMyMath1 Extends BaseClass::iBaseClass
    Result.s()
    Add(Value)
    Sub(Value)
  EndInterface
  
  Declare NewMath1()
  
EndDeclareModule

Module MyMath1
  
  UseModule BaseClass
  
  NewClass(iMyMath1)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Init(*this.sMyMath1)
    Debug "Initialize MyMath1"
  EndProcedure : AsInitializeObject(Init)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Destroy(*this.sMyMath1)
    Debug "Dispose MyMath1"   
  EndProcedure : AsDisposeObject(Destroy)
  
  ; ---------------------------------------------------------------------------
  
  Procedure.s Result(*this.sMyMath1)
    ProcedureReturn Str(*this\Value)
  EndProcedure : AsMethode(Result)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Add(*this.sMyMath1, Value = 0) 
    *this\Value + Value
  EndProcedure : AsMethode(Add)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Sub(*this.sMyMath1, Value = 0)  
    *this\Value - Value
  EndProcedure : AsMethode(Sub)
  
  ; ---------------------------------------------------------------------------
  
  Procedure NewMath1()
    InitObject(sMyMath1) ; Mehr kommt hier nicht rein!
  EndProcedure
  
  ; ---------------------------------------------------------------------------
  
  CheckInterface()
  
EndModule

; ***************************************************************************************

; Klasse Math 2 mit Vererbung Klasse Math 1

DeclareModule MyMath2
  
  UseModule MyMath1
  
  Structure sMyMath2 Extends sMyMath1
    ; Nothing
  EndStructure
  
  Interface iMyMath2 Extends iMyMath1
    Mul(Value)
    Div(Value)
  EndInterface
  
  Declare NewMath2()
  
EndDeclareModule

Module MyMath2
  
  EnableExplicit
  
  UseModule BaseClass
  
  NewClass(iMyMath2, iMyMath1)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Init(*this.sMyMath2)
    Debug "Initialize MyMath2"
  EndProcedure : AsInitializeObject(Init)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Dispose(*this.sMyMath2)
    Debug "Dispose MyMath2"   
  EndProcedure : AsDisposeObject(Dispose)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Mul(*this.sMyMath2, Value = 0)
    *this\Value * Value
  EndProcedure : AsMethode(Mul)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Div(*this.sMyMath2, Value = 1)
    *this\Value / Value
  EndProcedure : AsMethode(Div)
  
  ; ---------------------------------------------------------------------------
  
  Procedure.s Result(*this.sMyMath2)
    ProcedureReturn "$" + Hex(*this\Value)
  EndProcedure : AsNewMethode(Result) ; Methode Result() von geerbten Klasse ersetzen
    
  ; ---------------------------------------------------------------------------
  
  Procedure NewMath2()
    InitObject(sMyMath2) ; Mehr kommt hier nicht rein!
  EndProcedure
  
  CheckInterface()
  
EndModule

; ***************************************************************************************

Debug "Test Math 1"

UseModule MyMath1
Global *obj.iMyMath1 = NewMath1()
Debug "AddRef: " + *obj\AddRef()
Debug "AddRef: " + *obj\AddRef()
Debug "Release: " + *obj\Release()
Debug "Release: " + *obj\Release()
*obj\Add(200)
*obj\Sub(50)
Debug "Result = " + *obj\Result()
Debug "Release: " + *obj\Release()

Debug "Test Math 2"

UseModule MyMath2
Global *obj2.iMyMath2 = NewMath2()
Debug "AddRef: " + *obj2\AddRef()
Debug "AddRef: " + *obj2\AddRef()
Debug "Release: " + *obj2\Release()
Debug "Release: " + *obj2\Release()
*obj2\Add(200)
*obj2\Sub(50)
*obj2\Mul(100)
*obj2\Div(10)
Debug "Result = " + *obj2\Result()

Debug "Release: " + *obj2\Release()
Zuletzt geändert von mk-soft am 04.05.2019 14:39, insgesamt 7-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (OOP)

Beitrag von mk-soft »

Beispiel mit Parameter

Code: Alles auswählen

;-TOP

; Example 6

IncludeFile "Modul_BaseClassSmall.pb"

; *******************************************************************************

DeclareModule DataSet
  
  UseModule BaseClass
  
  ; Properties
  Structure sDataSet Extends sBaseClass
    *pData
    Count.i
    Array *pStr(0)
  EndStructure
  
  ; Methods
  Interface iDataSet Extends iBaseClass
    Get.s(index)
    Count()
  EndInterface
  
  UnuseModule BaseClass
  
  ; New Object
  Declare New(*pData)
  
EndDeclareModule

Module DataSet
  
  UseModule BaseClass
  
  NewClass(iDataSet)
  
  ; ---------------------------------------------------------------------------
  
  Procedure.s Get(*this.sDataSet, index)
    With *this
      If index < \Count
        ProcedureReturn PeekS(\pStr(index))
      Else
        ProcedureReturn ""
      EndIf
    EndWith
  EndProcedure : AsMethode(Get)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Count(*this.sDataSet)
    ProcedureReturn *this\Count
  EndProcedure : AsMethode(Count)
  
  ; ---------------------------------------------------------------------------
  
  Procedure Init(*this.sDataSet)
    Protected *pos, len, index
    With *this
      *pos = \pData
      Repeat
        len = MemoryStringLength(*pos)
        If len
          \Count + 1
          *pos + len * SizeOf(character) + SizeOf(character)
        Else
          Break
        EndIf
      ForEver
      Dim \pStr(\Count)
      *pos = \pData
      Repeat
        len = MemoryStringLength(*pos)
        If len
          \pStr(index) = *pos
          index + 1
          *pos + len * SizeOf(character) + SizeOf(character)
        Else
          Break
        EndIf
      ForEver
      
    EndWith
    
  EndProcedure : AsInitializeObject(Init)
  
  ; ---------------------------------------------------------------------------
  
  Procedure New(*pData)
    
    Protected *obj.sDataSet
    
    AllocateObject(*obj, sDataSet)
    If *obj
      *obj\pData = *pData
    EndIf
    InitializeObject(*obj)
    
    ProcedureReturn *obj
    
  EndProcedure
  
  ; ---------------------------------------------------------------------------
  
  CheckInterface()
  
EndModule

; *******************************************************************************

;- Test

EnableExplicit

Macro Object(ObjectName, ObjectType)
  ObjectName.ObjectType#::i#ObjectType
EndMacro

;BaseClass::ShowClasses()

Define.DataSet::iDataSet *set1, *set2

Define i

Debug "Data 1"
*set1 = DataSet::New(?DataSet1)
For i = 0 To *set1\Count() - 1
  Debug *set1\Get(i)
Next

Debug "----------------"
Debug "Data 2"
*set2 = DataSet::New(?DataSet2)
For i = 0 To *set2\Count() - 1
  Debug *set2\Get(i)
Next

DataSection
  DataSet1:
  Data.s "Sontag"
  Data.s "Montag"
  Data.s "Dienstag"
  Data.s "Mittwoch"
  Data.s "Donnerstag"
  Data.s "Freitag"
  Data.s "Samstag"
  Data.i 0
  
  DataSet2:
  Data.s "Januar"
  Data.s "Februar"
  Data.s "März"
  Data.s "April"
  Data.s "Mai"
  Data.s "Juni"
  Data.s "Juli"
  Data.s "August"
  Data.s "September"
  Data.s "Oktober"
  Data.s "November"
  Data.s "Dezember"
  Data.i 0
EndDataSection
Zuletzt geändert von mk-soft am 04.05.2019 14:40, insgesamt 5-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von mk-soft »

Beispiel ...
Zuletzt geändert von mk-soft am 15.08.2016 14:34, insgesamt 6-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von Kurzer »

Hallo mk-soft,

cool! Vielen Dank für deine Modulbasierte OOP Lösung.

OOP ist bisher mehr oder weniger an mir vorbei gegangen und ich habe mich erst vor kurzem dazu entschlossen mir OOP-basierte Entwicklungsumgebungen anzusehen, weil manche komplexe Aufgabe damit vermutlich besser zu lösen sind. Zumindest für mich persönlich, weil ich bei komplexen Programmen schnell den Fokus und den Überblick verliere.

Die Wahl fiel (unter anderem mit Hilfe des Forums) auf C++ und ich hatte mich bereits darauf eingelassen eine komplett neue Sprache zu erlernen, um mich mit dem Thema eingehender zu beschäftigen. Wie das so ist... aus Zeit- und Weihnachtsgründen habe ich diesbezüglich noch keine größeren Schritte unternommen.

Und jetzt sehe ich das hier. Hab mich sehr darüber gefreut - und zwar aus mehrerlei Hinsicht.

1) Deine Lösung kommt ohne einen PreCompiler aus! Ich hatte zur Zeit von PureBasic 5.00 schon mal versuchsweise eine der im Forum verfügbaren Precompiler-Lösungen getestet. Allerdings habe ich den weiteren Einsatz bei Auftreten der ersten Fehler bzw. "Eigenheiten" des Precompilers wieder verworfen. Grund: Ich war auf das Gutdünken des PreCompiler Programmierers angewiesen. Leider war das Projekt zu diesem Zeitpunkt beim Programmierer schon auf der "Sterbensliste" und ich sah mich leider nicht in der Lage den Fehler selbst auszumerzen.

2) Deine Lösung ist herrlich kompakt. Momentan verstehe ich zwar nur Bruchteile von den Internas (das mag auch mit an dem Bierchen liegen, dass ich mir heute Abend gegönnt habe :D), aber ich denke, dass ich die grundlegenden Funktionsprinzipien deiner OOP Lösung bei so einer überschaubaren Codelänge auch irgendwann in mein prozedurales Hirn hineingehämmert bekomme.

3) Möglicherweise bedeutet OOP viel mehr als Deine Lösung derzeit anbietet (ich kann das als ausschließlich prozedural arbeitender Programmierer nicht beurteilen), aber das, was deine Lösung bereits anbietet, sollte als Grundstein völlig ausreichen was meine Vorstellungen von erleichternder Programmierung in OOP angeht.

4) Es ist PureBasic. Wenn ich damit wirklich den Vorteil erlangen kann, den ich mir vom Einsatz einer zweiten OOP basierten Sprache erhofft habe (in meinem Fall hatte ich vor ein paar Tagen C++ gewählt), dann muss ich mich nicht etlichen neuen Problemen stellen: C++ lernen, in ein neues Programmierwerkzeug einarbeiten, rausfinden wie man C++ Code in ein PB Programm einbindet (z.B. als LIB), usw. Ich muss mich absolut nicht umgewöhnen und kann in meiner Lieblingssprache in der gewohnten IDE weiterarbeiten. Lediglich deine OOP-Syntax und besser noch die Internas deines OOP Moduls muss ich mir als neues Wissen aneignen. Und das sind derzeit gerade mal 4 Bildschirmseiten - so what!? Ich bin entzückt. :-)

Allerdings dazu noch eine Frage:

Wie schätzt du deinen code ein? Ist das alles schon wasserdicht ohne Memoryleaks oder vergessende Strukturen? Würdest du das Modul z.B. für ernsthafte Anwendungen nutzen oder ist das ganze eher als proof of concept anzusehen, also frühes alpha oder beta stadium? Ich kann das ehrlich gesagt nicht einschätzen.

Auf jeden Fall vielen Dank, dass du das teilst. :allright:

Edit:
Gleich noch eine Frage. Das Macro NewClass() entspricht der Prozedur AddClass(). Diese Prozedur gibt den Pointer von AddElement() zurück. Allerdings wird damit in Deinen Beispielen nichts weiter gemacht. Es wird lediglich NewClass() aufgerufen ohne den Rückgabewert irgendwo zu speichern. Ist dieser Wert nur irgend eine Testoption von dir oder hat er eine andere Bewandtnis?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von mk-soft »

Mein Ziel ist es ja nicht eine OOP-Sprache in Purebasic zu integrieren, sondern die Tipparbeit zu erleichtern.
Somit auch die Funktion der IDE wie Autovervollständigung und Anzeige der Procedure zu erhalten.

Purebasic bringt ja alles für Objektorientierung mit.
- Interfaces mit Vererbung. (Extends)
- Aufrufumgebung für Objekte

In der Hilfe für Interfaces fehlen allerdings funktionierende Beispiele.
Zu Objektorientierte Programmierung muss man wissen das beim Aufruf der Methode der erste Parameter der Zeiger auf das eigene Objekt ist. Der erste Eintrag ist immer der Zeiger auf die Funktionstabelle. Danach kommen die Daten für die Properties.

Bei den Verfahren in meiner BaseClass verwalte ich alle Objekte in einer Map. Diese kann man sich im Debugger auch anschauen.

Zu den fragen:
1. Es sollte zu keinen Speicherlecks führen. Auch bei der Verwendung von Listen und Map in den Properties.
Dazu wird zum anlegen des Objekts AllocateStructure und bei Release FreeStructure verwendet.

2. Das Konzept möchte ich so beibehalten und nur noch erweitern oder optimieren.

3. NewClass() wird ja ohne Parameter oder mit der zu Erbenen Objekt aufgerufen. AddClass(...) benötigt aber zur Verwaltungen der Objekte noch den Modulnamen. Dieser wird mit den Macro NewClass() automatisch mit den richten Modulname gesetzt.

Der Rückgabewert von NewClass() kann dazu verwendet werden ob das Object erfolgreich angelegt wurde.
Wird bei meinen kleine Beispielen etwas vernachlässigt.

So das war erstmal alles :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von Kurzer »

Besten Dank für die Beantwortung der Fragen. :allright:

Code: Alles auswählen

2. Das Konzept möchte ich so beibehalten und nur noch erweitern oder optimieren.
Ich find's klasse, eben weil es (für mich) nicht zu überladen ist und ich weniger Zeit für die Einarbeitung brauche. Sicher muss ich mir alle Folgeklassen selbst schreiben, aber das soll ja kein Nachteil sein. :-)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von mk-soft »

Was noch irgendwann erweitert wird das die BaseClass auf die Schnittstelle Unknown angepasst wird (fehlt ja nicht mehr viel)
und die Schnittstelle Dispatch bereitstelle.
Somit lassen sich dann auch DLL´s erstellen die man z.B unter "VB-Script" verwenden kann.

Diese haben aber keine Auswirkung auf die bisherige Verwendung.

Bin aber zur Zeit meistens nur mit MacOS unterwegs.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von mk-soft »

Update v1.11
- Debugger Fehler AsNewMethode. Ruft bei fehlende geerbten Methode CallDebugger auf
- Debugger Info ClassList. Hinterlegt bei eingeschalteten Debugger die verwendeten Klassen in BaseClass mit ab.

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul BaseClass (Modul als Objekt programmieren)

Beitrag von Kurzer »

Vielen Dank. :allright: Soeben geupdatet. :)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten