I am interested in calling J specifically from Python, preferably on Linux and Windows (and Mac). As Joe suggested, I've tried playing with jdll.ijs. I still can't get JGetM to work, but I'll have another bash at it later today. Thanks!
> From: [email protected] > Date: Sat, 19 Jul 2014 07:27:03 +0800 > To: [email protected] > Subject: Re: [Jprogramming] Calling j.dll from python > > Set and get data using j.dll can be quite involving. If you use windows, it > is much easier you to use to ole/com interface, search jwiki for more info. > Note that j8 only support the jdllserver interface. > > On 18.07.2014, at 23:05, Jon Hough <[email protected]> wrote: > > > Thanks, > > My test script, so far, is > > > > from ctypes import * > > > > cdll.LoadLibrary("j801/bin/libj.so") > > j = CDLL("j801/bin/libj.so") > > jt = j.JInit() > > > > j.JDo(jt, "a =: 1") > > > > a =j.JGetM( "a") > > > > print a > > > > This returns 4, even though I set a to be 1. I'm assuming 4 is the number > > of bytes returned (i.e. an int)??(By the way, if I do j.JGetM(jt, "a") I > > get a seg fault.Regarding jdll.ijs, unfortunately my J-skills are not > > powerful enough yet to make much sense of it: > > jget=: 3 : 0cmd=. libj,' JGetM i x *c *x *x *x *x''e p n t r s d'=. cmd cd > > pJ,(,y);4#<,0if. e do. smoutput 'error code: ',":e return.end.(t,r,s) > > jfix d) > > In particular > > JGetM i x *c *x *x *x *x > > is confusing. > >> Date: Fri, 18 Jul 2014 10:53:44 -0400 > >> From: [email protected] > >> To: [email protected] > >> Subject: Re: [Jprogramming] Calling j.dll from python > >> > >> JGetM is what you need, but I strongly suggest reviewing > >> http://jsoftware.com/wsvn/addons/trunk/general/misc/jdll.ijs (or your local > >> version) to get a better understanding of how things work > >> > >> This part addresses your question: > >> > >> jget=: 3 : 0 > >> cmd=. libj,' JGetM i x *c *x *x *x *x' > >> 'e p n t r s d'=. cmd cd pJ,(,y);4#<,0 > >> if. e do. > >> smoutput 'error code: ',":e > >> return. > >> end. > >> (t,r,s) jfix d > >> ) > >> > >> > >> On Fri, Jul 18, 2014 at 10:51 AM, Jon Hough <[email protected]> wrote: > >> > >>> Please ignore the last sentence from my previous email. Copied and pasted > >>> by accident. > >>> > >>>> From: [email protected] > >>>> To: [email protected] > >>>> Date: Fri, 18 Jul 2014 15:50:41 +0100 > >>>> Subject: Re: [Jprogramming] Calling j.dll from python > >>>> > >>>> Joe, thanks. Your suggestion seems to work. > >>>> However JGets seems to not exist.How do I then get the variable, once > >>> assigned? > >>>> I tried to search through the .so/.dll for "get" functions: > >>>> > >>>> nm -g libj.so | grep Get > >>>> Although jdll.ijs seems to contain jget, when I tried to call this (in > >>> Python) I get " undefined symbol: jget" (with variations on upper and > >>> lower cases) > >>>> > >>>> > >>>> > >>>> > >>>> and couldn't find a function that seemed to get the variables.Also I'm > >>> having trouble finding libj.dll > >>>>> Date: Fri, 18 Jul 2014 10:36:06 -0400 > >>>>> From: [email protected] > >>>>> To: [email protected] > >>>>> Subject: Re: [Jprogramming] Calling j.dll from python > >>>>> > >>>>> JInit() returns the instance that you need to invoke against > >>>>> > >>>>> see addons/general/misc/jdll.ijs > >>>>> > >>>>> jdo is defined as: > >>>>> > >>>>> jdo=: 3 : 0 > >>>>> > >>>>> (libj,' JDo i x *c') cd pJ, boxopen y > >>>>> > >>>>> ) > >>>>> > >>>>> > >>>>> so I suspect you need to be passing that pointer address with python > >>> too... > >>>>> > >>>>> > >>>>> jt = j.JInit() > >>>>> > >>>>> j.JDo(jt, "x =: 3") > >>>>> > >>>>> > >>>>> [untested] > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> On Fri, Jul 18, 2014 at 10:33 AM, Thomas Costigliola < > >>> [email protected]> > >>>>> wrote: > >>>>> > >>>>>> Bill, Jon, sorry if that suggestion did not apply. I remembered it > >>> was a > >>>>>> common pitfall when calling from C. Maybe that is not the case now. > >>>>>> > >>>>>> > >>>>>> On Fri, Jul 18, 2014 at 10:29 AM, Jon Hough <[email protected]> > >>> wrote: > >>>>>> > >>>>>>> My previous email was regarding Windows (7 with J801) > >>>>>>> I just tried to do the same in Ubuntu (J801) > >>>>>>> cdll.LoadLibrary("j801/bin/libj.so") > >>>>>>> j = CDLL("j801/bin/libj.so")>>> j.JInit()158010848 > >>>>>>> No idea what the above output means. Is that the pointer address of > >>>>>>> something? > >>>>>>> And then: > >>>>>>>>>> j.JDo("x =: 3")Segmentation fault (core dumped) > >>>>>>> And Python (2.7) crashed. > >>>>>>> > >>>>>>>> Date: Fri, 18 Jul 2014 22:09:28 +0800 > >>>>>>>> From: [email protected] > >>>>>>>> To: [email protected] > >>>>>>>> Subject: Re: [Jprogramming] Calling j.dll from python > >>>>>>>> > >>>>>>>> From which resource did you learn that(not python)? It should be > >>> very > >>>>>> out > >>>>>>>> dated. > >>>>>>>> On Jul 18, 2014 6:00 PM, "Jon Hough" <[email protected]> > >>> wrote: > >>>>>>>> > >>>>>>>>> I am trying to call jdll.JDo from python but I get the error > >>> message, > >>>>>>>>> access violation. > >>>>>>>>> > >>>>>>>>> Here is my python. > >>>>>>>>> > >>>>>>>>> Cdll.LoadLibrary(path to j.dll) > >>>>>>>>> J =CDLL(path to j.dll) > >>>>>>>>> > >>>>>>>>> J.JDo("x =: i. 3") > >>>>>>>>> > >>>>>>>>> This gives am error. In fact any string gives the error. > >>>>>>>>> > >>>>>>>>> J.JGet doesnt seem to give errors, but since I cannot set any j > >>>>>>> variables, > >>>>>>>>> it is not easy to test. > >>>>>>>>> > >>>>>>>>> > >>>>>> > >>> ---------------------------------------------------------------------- > >>>>>>>>> For information about J forums see > >>>>>> http://www.jsoftware.com/forums.htm > >>>>>>>>> > >>>>>>>> > >>> ---------------------------------------------------------------------- > >>>>>>>> For information about J forums see > >>> http://www.jsoftware.com/forums.htm > >>>>>>> > >>>>>>> > >>> ---------------------------------------------------------------------- > >>>>>>> For information about J forums see > >>> http://www.jsoftware.com/forums.htm > >>>>>>> > >>>>>> > >>> ---------------------------------------------------------------------- > >>>>>> For information about J forums see > >>> http://www.jsoftware.com/forums.htm > >>>>>> > >>>>> ---------------------------------------------------------------------- > >>>>> For information about J forums see http://www.jsoftware.com/forums.htm > >>>> > >>>> ---------------------------------------------------------------------- > >>>> For information about J forums see http://www.jsoftware.com/forums.htm > >>> > >>> ---------------------------------------------------------------------- > >>> For information about J forums see http://www.jsoftware.com/forums.htm > >>> > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
