Seite 4 von 6

Verfasst: 26.05.2009 18:58
von Kaeru Gaman
lass mich mal wild raten:
du hast eine Proc declared, die du nirgens tatsächlich "erzeugst"

Verfasst: 26.05.2009 19:00
von ts-soft
Ich würde sagen der Rückgabe Type der Procedure und Declaration
unterscheiden sich.

Verfasst: 26.05.2009 19:14
von Kaeru Gaman
>> (die letzte leere Zeile...)

deswegen sage ich, die Procedure ist nicht vorhanden, sonst müßte ihm die Fehlermeldung ja die Zeile der Procedure rausrücken.

Verfasst: 26.05.2009 19:39
von X0r
>deswegen sage ich, die Procedure ist nicht vorhanden, sonst müßte ihm die Fehlermeldung ja die Zeile der Procedure rausrücken.

Mit PB 4.1 läuft alles glatt. Deklarieren tu ich die Prozeduren bzw. Methoden ja lediglich in den Klassen. Wenn es da ein Problem geben würde, müsste PureObject nen Error melden. Leider es aber nicht, sondern PB.

Edit:
Selbst dieser code hier verursacht den selbigen Fehler:

Code: Alles auswählen

Class TEST
TEST()

EndClass

Procedure TEST.TEST()

EndProcedure
Scheint ein bug von PureObject zu sein.

Verfasst: 26.05.2009 19:50
von X0r
Und da hab ich den Fehler schon gefunden.
Ausgabe von PureObject:

Code: Alles auswählen

Interface TEST
  TEST()
  
  Release() : EndInterface : Structure sTEST : *vt : EndStructure : Declare.l ConstructTEST() : Declare.l TEST_Release(*this): Global _VT_TEST

Procedure TEST_TEST(*this.sTEST ) : Protected *thisM.TEST = *this
  
EndProcedure

; ------------------------------- OOP Constructors, etc. -------------------------------

Procedure ConstructTEST()
  Protected *this.sTEST = AllocateMemory(SizeOf(sTEST))
  Protected *thisM.TEST = *this
  If Not *this : ProcedureReturn #False : EndIf
  If Not _VT_TEST And SizeOf(TEST)
    _VT_TEST = AllocateMemory(SizeOf(TEST)) ; Global virtual table
    CompilerIf Defined(TEST_TEST, #PB_Procedure)
      PokeL(_VT_TEST + OffsetOf(TEST\TEST()), @TEST_TEST())
    CompilerEndIf
    CompilerIf Defined(TEST_Release, #PB_Procedure)
      PokeL(_VT_TEST + OffsetOf(TEST\Release()), @TEST_Release())
    CompilerEndIf
  EndIf
  *this\vt = _VT_TEST
  CompilerIf Defined(TEST_TEST, #PB_Procedure) = #True
    TEST_TEST(*this)
  CompilerEndIf
  ProcedureReturn *this
EndProcedure


Procedure TEST_Release(*this)
EndProcedure 

Man schaue sich diesen Abschnitt an:

Code: Alles auswählen

Release() : EndInterface : Structure sTEST : *vt : EndStructure : Declare.l ConstructTEST() : Declare.l TEST_Release(*this): Global _VT_TEST
Die Funktionen sind als long deklariert. Allerdings geben sie nen int Wert zurück.

Könntest du das bitte so schnell wie möglich fixen? Sonst muss ich leider umsteigen.

Verfasst: 26.05.2009 19:53
von ts-soft
Hab ich also doch recht gehabt :mrgreen:

Verfasst: 26.05.2009 19:54
von X0r
>Hab ich also doch recht gehabt Mr. Green

Jo.
War aber nicht mein Fehler, sonst hätt ich den sofort gefunden. :mrgreen:

Verfasst: 26.05.2009 21:07
von Kaeru Gaman
> Mit PB 4.1 läuft alles glatt.

tja, es wird eben erst neuerdings geprüft, ob Declare und tatsächliche Proc übereinstimmen.

wundert mich halt nur, dass du keine saubere Zeilenangabe bekommst,
aber das hängt womöglich mit dem Preparser zusammen.

Verfasst: 26.05.2009 21:37
von X0r
Und an solchen Tagen träumt man wieder vom OOP-Support in PB.

Verfasst: 26.05.2009 21:44
von ts-soft
Schick dem Inc eine PN und dann sollte er das ja innerhalb kürzester Zeit
beheben können.