Despite using Active4D since V1 I only recently learned that when calling 4D Methods, numeric and textual parameters in the 4D method must be typed C_REAL and C_TEXT. This is clearly documented but I somehow missed it and in our case it hadn't been causing clearly noticeable problems. Recently (thanks to Aparajita) we discovered that it was contributing to a memory leak that would eventually crash 4D. In my case I had a lot of methods with C_STRING parameters that needed to be replaced with C_TEXT. Easy enough to fix.
`Example Method called by Active4D C_TEXT($1; $inString) `replaces C_STRING($1;$inString;20) $inString := Substring($1;1;20) We've long run a structure that serves both Active4D and legacy (Netlink/WS4D style) pages. I am in the process of rewriting the latter in A4D and am encountering more called 4D methods that have illegal parameter types. My question involves having to now use C_REAL instead of C_LONGINT. Most of the cases where I'll need to replace C_REAL parameters are methods where I currently use C_LONGINT to reference a primary key for a QUERY. `Example Method 2 called by Active4D C_REAL ($1; $tableID) ` replaces C_LONGINT($1; $tableID) $tableID := $1 QUERY([TABLE];[TABLE]id = $tableID) `[Table]id is a long integer, $tableID is a real ... I have always run 4D compiled in production. I always compile with "All variables are typed". From my CS studies and Numerical Analysis classes I know that a floating point number that "looks equal" to a similar integer isn't always equal. In re-typing existing method C_LONGINT parameters to C_REAL, do I need to worry that about this? Should I do something like this? C_REAL ($1) ` replaces C_LONGINT($1; $tableID) C_LONGINT($tableID) $tableID := Round($1;0) QUERY([TABLE];[TABLE]id = $tableID) `[Table]id is a long integer, $tableID is a real Thanks, Brad Perkins _______________________________________________ Active4D-dev mailing list [email protected] http://list.aparajitaworld.com/listinfo/active4d-dev Archives: http://active4d-nabble.aparajitaworld.com/
