keine Liste als Parameter im Interface möglich ?

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Eigendlich währe das möglich. Die Liste wird (soweit ich weis) als Pointer übergeben.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Den Pointer zur ner Liste kannste schon immer übergeben, im Imterface ist
dies ja ein Long.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Und wie kann ich diesen Pointer normal verwenden, wie eine Liste?
Gibt es dafür Funktionen, die aus einer Pointer-Liste lesen können?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

So könntest du die Übergabe einer Liste machen:

Code: Alles auswählen

Macro GetListPtr(ptrname, listname)
  MOV Eax, t_#listname
  MOV [p_#ptrname], Eax
EndMacro

Interface test
  getlist(a.l, *p)
EndInterface

Structure ctest
  *vt
  *getlist
EndStructure

Procedure test_getlist(*this.ctest, a.l, list.l())
  Debug "a ist " + Str(a)
  
  ForEach list()
    Debug "element enthält: " + Str(list())
  Next
EndProcedure


Define.test a
Define.ctest b
b\vt = @b+4
b\getlist = @test_getlist()
a = @b
;- end init

NewList k.l()
AddElement(k())
k() = 1
AddElement(k())
k() = 2
AddElement(k())
k() = 3
AddElement(k())
k() = 4
AddElement(k())
k() = 5

*p
GetListPtr(p, k)
a\getlist(666, *p)
D. h. vergiss es.

Mach deine Methode so, dass sie einen Pointer auf ein Element erwartet.
So kannst du deine Liste Element für Element durchgehen (und jedes
Element der Interface-Methode übergeben).

Viel Spass :allright:
Gesperrt