Hi Xiao-Yong, I believe this could be achieved by a single "master"-native function which then loads the actual DLL as specified by the arguments of the master function. Referring to the example in link you gave below: a=: 'kernel32 GetProfileStringA s *c *c *c *c s' b=: 'windows';'device'; 'default'; (32$'z');32 a cd b +--+-------+------+-------+--------------------------------+--+ |31|windows|device|default|HP LaserJet 4P/4MP,HPPCL5MS,LPT |32| +--+-------+------+-------+--------------------------------+--+ This would become in GNU APL: a← 'kernel32 GetProfileStringA s *c *c *c *c s' b← 'windows' 'device' 'default' (32⍴'z') 32 'universal-dll-loader' ⎕FX 'cd' a cd b ⍝ dlopen("kernel32.dll"), dlsym("GetProfileStringA") on first access, ⍝ and call GetProfileStringA with argument b The universal-dll-loader.so needs to be written only once and contains mainly the code from github below. That code somehow goes into the native/template_F12.cc code of GNU APL and thats it. If you need help doing this then please let me know. /// Jürgen On 02/07/2017 06:30 PM, Xiao-Yong Jin
wrote:
It would be nice if one doesn't need to write wrappers and the APL system can do the structure conversions within the APL interpreter. In J, you can dlopen a library and pass J values directly without writing and compiling C, see http://www.jsoftware.com/help/user/call_procedure.htm and the relevant code is at https://github.com/jsoftware/jsource/blob/master/jsrc/x15.c It would simplify using external libraries a lot.On Feb 4, 2017, at 7:38 AM, Juergen Sauermann <juergen.sauerm...@t-online.de> wrote: Hi, yes there is: native functions. You can load shared libraries and ⎕FX functions in them to be called from APL code. The src/native directory contains a few templates that you can use as a starting point and to call your favourite library from them. Of course you need to provide wrappers from/to APL values to/from the data structures expected or produced by the libraries. Coming back to your other problems, if you do not like the terminal I/O of GNU APL, then you can write your own one and call libapl from it. I have extended libapl recently, giving you the full functionality of GNU APL without the specific ways how it handles terminal IO. /// Jürgen On 02/04/2017 02:52 AM, enz...@gmx.com wrote:is there method for loading a c lib and using it in apl ? cdecl? like this in fpc? ftp://ftp.freepascal.org/fpc/docs-pdf/CinFreePascal.pdf |
- [Bug-apl] using c libs in apl? enztec
- Re: [Bug-apl] using c libs in apl? Juergen Sauermann
- Re: [Bug-apl] using c libs in apl? Peter Teeson
- Re: [Bug-apl] using c libs in apl? Elias Mårtenson
- Re: [Bug-apl] using c libs in apl? Juergen Sauermann
- Re: [Bug-apl] using c libs in apl? Xiao-Yong Jin
- Re: [Bug-apl] using c libs in apl? Juergen Sauermann
- Re: [Bug-apl] using c libs in apl? Elias Mårtenson
- Re: [Bug-apl] using c libs in apl? Juergen Sauermann
- Re: [Bug-apl] using c libs in ... Elias Mårtenson
- Re: [Bug-apl] using c libs... Juergen Sauermann
- Re: [Bug-apl] using c libs... Elias Mårtenson
- Re: [Bug-apl] using c libs... Juergen Sauermann
- Re: [Bug-apl] using c libs... Elias Mårtenson
- Re: [Bug-apl] using c libs... Xiao-Yong Jin
- Re: [Bug-apl] using c libs... Elias Mårtenson
- Re: [Bug-apl] using c libs... Xiao-Yong Jin