Jon - it's trickier than I thought.

I have a partial implementation working that I can tinker with tomorrow

You need to use WinDLL on windows to get the calling convention right

J = WinDLL("c:/users/jbogner/downloads/j801_win32/bin/j.dll")
jt = J.JInit()
J.JDo(jt, "A=:i.5")
Out[34]: 0

see http://www.jsoftware.com/pipermail/programming/2013-November/033974.html
for details on how to get the values. I have modified the code  to work
with WinDLL and have something roughly working but ran out of time to work
on it more tonight


On Fri, Jul 18, 2014 at 7:54 PM, Jon Hough <[email protected]> wrote:

> 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to