Hi. Been there ... done some of it.
I use DL quite often on HPUX to invoke Cobol/C modules from libraries.
The best rule I can offer is that before passing any structured parameter,
you should 'pack' it to the
form that the target program expects.
Ruby will just pass a pointer to the packed string, and the target program
can interpret it however the hell it wants.
eg.,
a=[3,"a1","a2","a3"]
param=a.pack("LA5A5A5") # (integer + 3x5byte array of strings) => 19 byte
string
result=routine[param].first
hth,
Tad
I located an old test script which may be of some help :
The script calls a Cobol module called FCREFNUM from a shared library
The routine expects 3 parameters passed by reference, the 3rd parameter is
a simple array.
require "dl"
ctrargs=%w{0 1 999999}
ctrname=ARGV[0].upcase if ARGV.size >=1
ctrargs=ARGV[1].split(":") if ARGV.size >=2
Image3k =DL.dlopen("/home/acore_dev/library/lib/libimage3k.sl")
fcrefnum=Image3k["FCREFNUM","ISSS"]
counterstart=ctrargs[0].rjust(10,"0") # 10 digit zero
counterincr =ctrargs[1].rjust(10,"0") # 10 digit zero
counterend =ctrargs[2].rjust(10,"0") # 10 digit zero
counterparms=[counterstart,counterincr,counterend].pack("a10a10a10")
countervalue="0".rjust(10,"0")
countername=ctrname.ljust(8)
n=fcrefnum[countername,countervalue,counterparms].first # call FCREFNUM
p [countervalue,n]
Internet
blackapache512
-ticket@yahoo. Pour
com ruby-core / ruby-lang.org
cc
04/05/2009
07:44 Objet
[ruby-core:23354] Ruby/DL Documentation
Veuillez
rñÑondre 20
ruby-core@ruby
-lang.org
Hello,
recently i have been trying to learn and use dl library. while searching i
found this excellent link
http://www.jbrowse.com/text/rdl_en.html
unfortunately it is specific to 1.8.x
i wonder how people here use DL, since it is very scarcely documented. i
have been trying to
hack around ./ext/dl/*.c files but i have gained very little usable
information.
ok, my question is about passing an array from ruby to some native
libraries (IPP(http://software.intel.com/en-us/intel-ipp/) to be specific)
on windows. yes i about other alternatives, i could embed ruby in my app
and do whatever, there is gr8 support there
but this is about quickly loading and using native libraries via dynamic
loader.
consider code below
some_fast_math_function( float* array, int len);
then how to pass 'array' argument from ruby ?
i tried this
require 'dl'
module NativeLibs
# do the job for accessing some_fast_math_function
end
array = DL.malloc(size)
NativeLibs.some_fast_math_function( array, size) # crashes :(
some how sucess is elusive for me, this crashes(core dumps) for me, i am
sure this is due to my inexperienced stunts with DL
Aston
Now surf faster and smarter ! Check out the new Firefox 3 - Yahoo! Edition
* Click here!
This message and any attachments (the "message") is
intended solely for the addressees and is confidential.
If you receive this message in error, please delete it and
immediately notify the sender. Any use not in accord with
its purpose, any dissemination or disclosure, either whole
or partial, is prohibited except formal approval. The internet
can not guarantee the integrity of this message.
BNP PARIBAS (and its subsidiaries) shall (will) not
therefore be liable for the message if modified.
Do not print this message unless it is necessary,
consider the environment.
---------------------------------------------
Ce message et toutes les pieces jointes (ci-apres le
"message") sont etablis a l'intention exclusive de ses
destinataires et sont confidentiels. Si vous recevez ce
message par erreur, merci de le detruire et d'en avertir
immediatement l'expediteur. Toute utilisation de ce
message non conforme a sa destination, toute diffusion
ou toute publication, totale ou partielle, est interdite, sauf
autorisation expresse. L'internet ne permettant pas
d'assurer l'integrite de ce message, BNP PARIBAS (et ses
filiales) decline(nt) toute responsabilite au titre de ce
message, dans l'hypothese ou il aurait ete modifie.
N'imprimez ce message que si necessaire,
pensez a l'environnement.