Variables are not independent

From Liberty BASIC Family
Jump to navigation Jump to search


Description

If you create a copy of a variable by assigning it to another and you use the copy to change it by an API function, both variables are changed.

Example code to demonstrate the problem.

 open "Shlwapi.dll" for dll as #shlwapi

 OrigVar$ = DefaultDir$

 CopyVar$ = OrigVar$

 print "Before:"
 print "DefaultDir ... "; DefaultDir$
 print "OrigVar ...... "; OrigVar$
 print "CopyVar ...... "; CopyVar$

 calldll #shlwapi, "PathRemoveFileSpecA", CopyVar$ as ptr, result as long

 print
 print "After:"
 print "DefaultDir ... "; DefaultDir$
 print "OrigVar ...... "; OrigVar$
 print "CopyVar ...... "; CopyVar$

 close #shlwapi
 end

Example code to work around the problem.

 open "Shlwapi.dll" for dll as #shlwapi

 OrigVar$ = DefaultDir$

 ' add an empty string to the variable to get a real copy
 CopyVar$ = OrigVar$ + ""

 print "Before:"
 print "DefaultDir ... "; DefaultDir$
 print "OrigVar ...... "; OrigVar$
 print "CopyVar ...... "; CopyVar$

 calldll #shlwapi, "PathRemoveFileSpecA", CopyVar$ as ptr, result as long

 print
 print "After:"
 print "DefaultDir ... "; DefaultDir$
 print "OrigVar ...... "; OrigVar$
 print "CopyVar ...... "; CopyVar$

 close #shlwapi
 end