Structured variable in procedure

Just starting out? Need help? Post your questions and find answers here.
User avatar
Samuel
Enthusiast
Enthusiast
Posts: 755
Joined: Sun Jul 29, 2012 10:33 pm
Location: United States

Structured variable in procedure

Post by Samuel »

Hello everyone,

I'm sending a structure to a procedure and then trying to send that data to another procedure, but in the second procedure the data is coming up empty.
Anyone have any ideas why?

Code: Select all

EnableExplicit

Structure Vector
  X.d
  Y.d
  Z.d
EndStructure

Define.Vector Origin
Origin\X = 1.0
Origin\Y = 2.0
Origin\Z = 3.0

Define.Vector Vertex
Vertex\X = 0.5
Vertex\Y = 0.25
Vertex\Z = 0.25

Global.Vector Result

Declare LoadData(*Data0.Vector, *Data1.Vector)
Declare Vector(*V0.Vector, *V1.Vector, *V2.Vector)

LoadData(@Origin, @Vertex)

Debug "Result"
Debug Result\X
Debug Result\Y
Debug Result\Z

Procedure LoadData(*Data0.Vector, *Data1.Vector)
  
  Define.Vector Data0
  Define.Vector Data1
  
  Debug "Data0"
  Debug *Data0\X
  Debug *Data0\Y
  Debug *Data0\Z
  Debug ""
  
  Debug "Data1"
  Debug *Data1\X
  Debug *Data1\Y
  Debug *Data1\Z
  Debug ""
  
  Vector(@Result, @Data0, @Data1)
  
EndProcedure

Procedure Vector(*V0.Vector, *V1.Vector, *V2.Vector)
  
  Debug "V0"
  Debug *V0\X
  Debug *V0\Y
  Debug *V0\Z
  Debug ""
  
  Debug "V1"
  Debug *V1\X
  Debug *V1\Y
  Debug *V1\Z
  Debug ""
  
  Debug "V2"
  Debug *V2\X
  Debug *V2\Y
  Debug *V2\Z
  Debug ""
  
  *V0\X = *V1\X - *V2\X
  *V0\Y = *V1\Y - *V2\Y
  *V0\Z = *V1\Z - *V2\Z

EndProcedure
Deluxe0321
User
User
Posts: 69
Joined: Tue Sep 16, 2008 6:11 am
Location: ger

Re: Structured variable in procedure

Post by Deluxe0321 »

Code: Select all

Vector(@Result, *Data0, *Data1)
if you want to "send" the data from the "main" code

Code: Select all

Vector(@Result, @Data0, @Data1)
Data0 & Data1 are empty ;) since you define them newly in LoadData(*Data0.Vector, *Data1.Vector)

Code: Select all

  Define.Vector Data0
  Define.Vector Data1
Last edited by Deluxe0321 on Mon Jun 02, 2014 8:15 pm, edited 1 time in total.
User avatar
skywalk
Addict
Addict
Posts: 4220
Joined: Wed Dec 23, 2009 10:14 pm
Location: Boston, MA

Re: Structured variable in procedure

Post by skywalk »

Code: Select all

EnableExplicit

Structure Vector
  X.d
  Y.d
  Z.d
EndStructure

Define.Vector Origin
Origin\X = 1.0
Origin\Y = 2.0
Origin\Z = 3.0

Define.Vector Vertex
Vertex\X = 0.5
Vertex\Y = 0.25
Vertex\Z = 0.25

Global.Vector Result

Declare LoadData(*Data0.Vector, *Data1.Vector)
Declare Vector(*V0.Vector, *V1.Vector, *V2.Vector)

LoadData(Origin, Vertex)

Debug "Result"
Debug Result\X
Debug Result\Y
Debug Result\Z

Procedure LoadData(*Data0.Vector, *Data1.Vector)
 
  Debug "Data0"
  Debug *Data0\X
  Debug *Data0\Y
  Debug *Data0\Z
  Debug ""
  
  Debug "Data1"
  Debug *Data1\X
  Debug *Data1\Y
  Debug *Data1\Z
  Debug ""
  
  Vector(Result, *Data0, *Data1)
  
EndProcedure

Procedure Vector(*V0.Vector, *V1.Vector, *V2.Vector)
  Debug "V0"
  Debug *V0\X
  Debug *V0\Y
  Debug *V0\Z
  Debug ""
  
  Debug "V1"
  Debug *V1\X
  Debug *V1\Y
  Debug *V1\Z
  Debug ""
  
  Debug "V2"
  Debug *V2\X
  Debug *V2\Y
  Debug *V2\Z
  Debug ""
  
  *V0\X = *V1\X - *V2\X
  *V0\Y = *V1\Y - *V2\Y
  *V0\Z = *V1\Z - *V2\Z

EndProcedure
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
User avatar
Tenaja
Addict
Addict
Posts: 1959
Joined: Tue Nov 09, 2010 10:15 pm

Re: Structured variable in procedure

Post by Tenaja »

As the other guys have shown, to send the address of Data0, you add an ampersand: @Data0 . To use that address, your proc parameter must be a pointer to handle it properly: *Data0.Vector . Read the Help file on pointers for a more complete description.
User avatar
Samuel
Enthusiast
Enthusiast
Posts: 755
Joined: Sun Jul 29, 2012 10:33 pm
Location: United States

Re: Structured variable in procedure

Post by Samuel »

Thanks for the help, guys. This makes a lot more sense.
Post Reply