Normally, C/SIDE does a pretty good job at shielding you from the nitty gritty details of memory (de)allocation, calling conventions and pointer arithmetic. Reference parameters are one of the rare places where the curtain is lifted, allowing programmers a peek at the inner workings of the run-time.
Despite the fact that this is pretty standard behaviour in most programming languages, I remember being (temporarily) surprised when I first encountered a situation like the one below.
Since the Text parameter in function ByReference gets passed as a pointer, its formal definition (with a length of 30 characters) is basically irrelevant: the actual parameter LongText (with a value that is currently 40 characters long) defines how many characters it can hold: no overflow error there.
Note that this even applies if the ByReference function would assign a new value to the Text parameter: if LongText in OnRun is sufficiently large, Text can easily exceed the 30 character limitation of the function parameter.