kann ich überprüfen, ob eine Adresse auf eine Procedure zeigt?
also im Prinzip so:
Code: Alles auswählen
Procedure myCallback()
EndProcedure
Debug IsProcedure(@myCallback()) ; -> True
Debug IsProcedure(123) ; -> False
Code: Alles auswählen
Procedure myCallback()
EndProcedure
Debug IsProcedure(@myCallback()) ; -> True
Debug IsProcedure(123) ; -> False
Code: Alles auswählen
Procedure isProcedure(*proc)
If ExamineAssembly(*proc)
While NextInstruction()
Text$ + RSet(Hex(InstructionAddress()), SizeOf(Integer)*2, "0")
Text$ + " " + InstructionString() + Chr(13)
If InstructionString() = "ret " : Break : EndIf
Wend
EndIf
Debug Text$
EndProcedure
Procedure a()
EndProcedure
Procedure b(a.i)
EndProcedure
Procedure c(a.i, b.s)
EndProcedure
Debug "a()"
isProcedure(@a())
Debug "b()"
isProcedure(@b())
Debug "c()"
isProcedure(@c())
Code: Alles auswählen
Procedure IsProcedure(adresse.i)
Select adresse
Case @myCallback()
ProcedureReturn 1
;Case ...
;Case ...
EndSelect
EndProcedure
Code: Alles auswählen
Declare IsProcedure(*pointer)
Procedure Test()
EndProcedure
DataSection
LabelInData:
Data.i 0
EndDataSection
Define var.i
Debug IsProcedure(@Test())
Debug IsProcedure(?LabelInData)
Debug IsProcedure(@var)
;Folgendes muss wirklich am ende des Quellcodes kommen - wirklich GANZ zum schluss!
StartOfPrg:
Procedure IsProcedure(*pointer)
Debug Hex(*pointer)+" "+Hex(?StartOfPrg)+" "+Hex(@IsProcedure())
If *pointer>?StartOfPrg And *pointer<@IsProcedure()
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
End
Ganz simpel: Ich habe eine Main.pb und eine Include.pbi. In der Main starte ich einen Vorgang innerhalb dessen ich eine Prozedur der Main.pb aufrufen möchte.wozu braucht man sowas?
Code: Alles auswählen
Procedure myCallback()
Debug "Piep!"
EndProcedure
MachMalPiep = @myCallback()
SeiFleissig()
Code: Alles auswählen
Procedure SeiFleissig()
... TuDies()
... CallFunctionFast(MachMalPiep)
... TuDas()
EndProcedure