| procedure my_procedure(var a_record: t_my_record); | | In this case, a simple pointer is passed to my_procedure. This is also | the way most C libraries work, passing a pointer to a structure.
Would a C program be able to call a Pascal SO or DLL file and directly read a record from pascal, as a structure in C? i.e. no hassles required (presuming the record didn't contain strings of course.. let's just say three integers) | | When a function returns a record, an additional pointer parameter is | passed to it, invisibly to the pascal programmer, and the function fills | in the structure pointed to by that parameter. some performance loss then. But not actually twice the memory used to make a copy? | | For this reason, I personally tend to prefer a var-parameter: A function | returning a record looks like creating or allocating that record, which | is not true. A var-parameter shows, in pascal, a structure similar to | what happens on the machine code level. But it's a matter of taste, and, | of how the function result is used: When the result is often used as | part of expressions, or as a parameter to other procedures, the "result" | way is more legible than the "var-parameter" way. Maybe make it easier, a result prefix or something like so could be used: procedure(integer, string, other, Result_Record); or function(integer, string, other, Result_Record): boolean; or function(integer, string, other, ResultRecord): boolean; Researching this topic, I found some arguments and discussions from people using other languages coming across the same questions - such as Ada people questioning the Out keyword in their functions, and so on. I just want to clarify what the best way is.. I do like returning a record since the code appears more clear to me this way, but I suppose I'll use a parameter for performance reasons. When teaching people Pascal or learning Pascal, I'm sure people will question how a parameter can possibly return a variable.. "isn't that what the result is supposed to do?" So it does feel sort of hackish to do that. It feels very win32api-ish too. In this case, I wish there were a way to make code clearer while still offering the same performance/benefits. I think Result_Record is somewhat of a hack too.. almost like a "workaround" to something that might be possible to improve.. but I'm not so sure if it can. It's real high priority though, since most people know you can return a value as a parameter. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal