> 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
It does not do anything at all. It is just a static page with an entry box. > > 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 > > > _______________________________________________ > sqlite-users mailing list > sqlite-users at mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users