Seite 1 von 1

Interfaces in PureBASIC; Wie?

Verfasst: 27.11.2004 02:39
von Heroglyph
Ich bin's mal wieder :).
Ich habe beim durchstöbern der Hilfe einen interessanten Befehl gefunden, mit dem Pure OO etwas näher kommt ('Interface').
Nun steht in der Hilfe zu Interface zwar, wie man ein Objekt in PB benutzt, nicht jedoch, wie man eines erstellt. Es steht bei Beispiel 3 zwar, dass sich ein Beispiel zur Erstellung im Ordner 'PureBasic/Sources' befindet, aber dieser Ordner existiert erstens nicht und zweitens finde ich im Ordner 'PureBasic/Examples/Sources Advanced' auch kein Beispiel dazu (zumindest sehe ich keins). Ich habe auch schon versucht, einfach eine Testprozedur zu schreiben, die in ein Interface zu packen und eine Variable damit zu deklarieren, um sie dann damit aufzurufen, aber ich bekomme nur eine Fehlermeldung von Windows /:->.
Kann das Thema vielleicht jemand für mich mal kurz umreißen oder mir sagen, wo ich etwas dazu lesen kann?
Danke schon im Vorraus :).

Verfasst: 27.11.2004 03:04
von Andre
Schau mal in das PureBoard-Archiv mittels der Suchfunktion und außerdem ins CodeArchiv auf www.PureArea.net

In beiden solltest Du schon einige Erläuterungen und Beispiele finden. 8)

Verfasst: 27.11.2004 04:12
von Heroglyph
Ich wusste nicht, dass es noch ein Archiv gibt, sonst hätte ich auch dessen Suchfunktion verwendet und nicht nur diese hier :/.
Danke für den Hinweis, ich habe im Archiv alles gefunden, was ich brauche.

Verfasst: 27.11.2004 08:44
von DarkDragon
Ich hab mir da anfangs das kleinst mögliche Beispiel überhaupt zusammengebastelt:

Code: Alles auswählen

Interface Inter_Face
  MSG(Message.s)
EndInterface

Structure OBJ
  VTable.l
  Function.l[SizeOf(Inter_Face)/4]
EndStructure

Procedure Message(*t.Inter_Face, Message.s)
  MessageRequester("", Message.s)
EndProcedure

Procedure Constructor()
  *OBJ.OBJ = AllocateMemory(SizeOf(OBJ))
  *OBJ\VTable = *OBJ+OffsetOf(OBJ, Function)
  *OBJ\Function[0] = @Message()
  ProcedureReturn *OBJ
EndProcedure

Procedure Destructor(*OBJ.OBJ)
  FreeMemory(*OBJ.OBJ)
EndProcedure

*MyOBJ.Inter_Face = Constructor()
*MyOBJ\MSG("Hallo, dies ist ein Testtext")
Destructor(*MyOBJ)
Dann hab ich die ganze Geschichte kappiert.