http://www.cdecl.org/

It doesn't work though with complex arguments like this:
void (*xFunc)(sqlite3_context*,int,sqlite3_value**)

which is an argument of sqlite3_create_function_v2

RBS

On Sun, Jan 24, 2016 at 8:12 PM, Roger Binns <rogerb at rogerbinns.com> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 24/01/16 02:19, Bart Smissaert wrote:
> > You didn't mention it but how arguments are called from VB6 is also
> > very important, that is ByVal or ByRef. I think that unless the
> > argument is going to be altered I have to pass them always ByVal.
>
> Sort of.  You need to look at the C interface.  ByVal makes a copy of
> the value and passes that to the function.  The function can do whatever
> it wants to the copy as it won't affect the caller's version.  Byref
> passes a pointer to the value in memory.  The called function has to
> dereference the pointer to get the value at that location.  It can also
> modify the value at that location, affecting the caller.  That ties in
> with your rule of thumb.
>
> But they are not interchangeable.  Randomly specifying one or the
> other and seeing if it works is not a good idea.  Sometimes you do the
> wrong one but can get lucky, or more likely crash/corrupt memory.
>
> As an analogy, it is the difference between handing you a photocopy of
> a document versus giving you a mailbox number that has a document
> inside.  But realise that a mailbox is very different than what is
> inside, and it is especially the case that they can be very different
> sizes (eg it could be a big package inside the mailbox with a small
> number).  C programmers will use ByRef if they want the item to be
> modified, but can also do so if the item is larger since a mailbox
> (pointer) number takes less space than the larger item.
>
> In C syntax an integer is written as 'int' while a pointer to an
> integer is written as 'int *' (the star is typically pronounced as
> pointer).  Your rule should be ByVal when there are no '*' and ByRef
> when there are.  The rules are non-obvious when you get more
> complicated combinations of types and pointers.  Fortunately there is
> a site that turn them into English for you.
>
>   http://www.cdecl.org/
>
> Try the following:
>
>   int x;
>
>   int *x;
>
> Roger
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iEYEARECAAYFAlalMEQACgkQmOOfHg372QS1NACgkBqpEHb4q/XxAMgrfBDe/EMj
> 6+QAn2qDOgHITU8lrm68DiyIC62g06bb
> =I6gu
> -----END PGP SIGNATURE-----
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>

Reply via email to