--- Oleg Kobchenko <[EMAIL PROTECTED]> wrote:

> --- "Miller, Raul D" <[EMAIL PROTECTED]> wrote:
> 
> > Oleg Kobchenko wrote:
> > > the proof of concept pcall example is now turned into
> > > fully functional Addon. Windows is right now, but can
> > > easily be ported to UNIX, since the idea is trivial.
> > 
> > Documentation suggests that C function 'inc' with definition:
> > 
> > int inc(int x, int y) {return x+y;}
> > 
> > Could be invoked as
> > 
> >   '0 12345 i i i' CONJ 3;4
> > 
> > if 12345 were the address of inc
> > 
> > But examples do not match this (I'm guessing they represent
> > something more like '1 XXX i i i' CONJ vti;...)
> > 
> > This is probably not a big issue, since this is just example
> > code, but the examples use 'cp4', and I've not dissected the
> > demo to see what this means.
> 
> You are guessing correctly, but the notation
>    '0 12345 i i i' CONJ 3;4
> is the proposal to enhance 15!:0
> 
> To make a proof of concept, it is now emulated by the pcall.dll.
> It has a sightly different approach: it has to have existing 15!:0 notation,
> which you use to call a pcall function with corresponding
> number of parameters, cp2 (or cc2) in this case and pass the
> as parameters function pointer and the rest are the original
> parameters. So it looks like
>   'pcall cp2 i i  i i' cd 12345 ; 3;4
> 
> There are three sets of such wrapper functions like cp2.
>   http://www.jsoftware.com/svn/addons/trunk/general/pcall/win/pcall.c
> 
> Two of them are just calling convention, where N is number
> of parameters N in (0..6):
>   cpN  -  call pascall (stdcall)
>   ccN  -  call cdecl
> 
> The third set is for interface pointer call (using pascal 
> convention as in COM)
>   ciN  -  call interface
> 
> The notation for ciN is
>   'pcall ci2 i i  i i' cd 2;789 ; 3;4
> 
> where 2 is vt-index and 789 is interface pointer "this"
> 
> It will call method "inc", assuming that "this" is 
> of such type A*:
> 
> class A {
>   virtual int __stdcall add(int x, int y);
>   virtual int __stdcall dec(int x, int y);
>   virtual int __stdcall inc(int x, int y);   // vt-index = 2
> };

Correction:

    The notation for ciN is
      'pcall ci2 i i i  i i' cd 2;789 ; 3;4



 
____________________________________________________________________________________
Finding fabulous fares is fun.  
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel 
bargains.
http://farechase.yahoo.com/promo-generic-14795097
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to