Code: Select all
PASS STRUCTURES TO FUNCTION: C PB
1. By value. 1 0 - Why?
2. By reference(address). 1 1
3. As Global variable. 1 1
Code: Select all
Structure myStruc
i.i
x.d
y.d
EndStructure
Global mySt.myStruc
mySt\i = 1
mySt\x = 2.1
mySt\y = 3.1
;Prototype UseStrucByVal(p.myStruc, Var2.i) ;<-- ByVal = Syntax error.
PrototypeC UseStrucByVal(*p_myStruc, Var2.i) ;<-- ByCopy = OK.
;Procedure UseStrucByVal(p.myStruc, Var2.i) ;<-- ByVal = Syntax error.
ProcedureC UseStrucByVal(*p_myStruc, var2.i) ;<-- ByCopy = OK.
Debug "-- UseStrucByVal --"
Debug PeekI(*p_myStruc + 0)
Debug PeekD(*p_myStruc + OffsetOf(myStruc\x))
Debug PeekD(*p_myStruc + OffsetOf(myStruc\y))
PokeI(*p_myStruc + 0, var2)
EndProcedure
Procedure UseStrucByRef(*p.myStruc, Var2.i) ;<-- ByRef = OK.
Debug "-- UseStrucByRef --"
Debug *p\i
Debug *p\x
Debug *p\y
EndProcedure
Define doProtoByVal.UseStrucByVal = @UseStrucByVal()
Define.i *p = AllocateMemory(SizeOf(myStruc))
CopyStructure(@mySt, *p, myStruc)
UseStrucByVal(*p, 99)
UseStrucByRef(@mySt, 99)
UseStrucByVal(*p, 99) ;<-- Show edited copy of mySt
ShowCallstack()
doProtoByVal(*p, 999)
FreeMemory(*p)
UseStrucByRef(@mySt, 99) ;<-- Show unedited mySt