I don't think my original question ever made it to the list but this would
appear to be the solution:

C_REAL ($1) `From Active4D
C_LONGINT($tableID) `Same type as [TABLE]id
$tableID := Int($1) `Convert Real to Integer


-- Brad Perkins


On 9/10/12 10:40 AM, "Perkins, Bradley D" <[email protected]> wrote:

>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/

Reply via email to