From: Park Heesob Date: 2006-12-04T19:00:58+09:00 Subject: Re: utilizing dlls in windows programming? Hi, >From: "warhero" >Reply-To: ruby-talk@ruby-lang.org >To: ruby-talk@ruby-lang.org (ruby-talk ML) >Subject: utilizing dlls in windows programming? >Date: Mon, 4 Dec 2006 14:55:07 +0900 > >This is a two part question: > >I have been reading the pick-axe book and was reading the chapter on >ruby and windows. I was reading documentation on the DL library. (is >library the correct term for that?), but my question: what is the >difference in the Win32API and using say DL.dlopen? Also in reading the >documentation on the Win32API in the back of the book, it said that >Win32API is more than likely going to be phased out. > Refer to http://weblog.jamisbuck.org/2004/12/30/disappointments-in-ruby-land and http://rubyforge.org/pipermail/win32utils-devel/2005-February/000294.html > >My second question: > >I am trying to utilize a DLL that is for phidgets (phidgets.com). They >have a dll (phidget21.dll) that is supposed to be used to gain access >to controlling their hardware. I've looked at their documentation for >the C language. Is that usually what a dll is written in? C? You can >download what I am looking at from the documentation section. (The C >API Manual ). I've tried a couple of different ways to try and use the >dll. Nothing as succeeded. I've tried the Win32API and the DL.dlopen. >It's probably just the way i'm trying to use it. here is what im >trying: > >require "dl" >Phidget21 = DL.dlopen("phidget21"); >f = Phidget21["CPhidgetRFID_create", "S"] >handle = f.call() >open = Phidget21["CPhidget_open", "II"] >open.call( 25807 ) > >The first problem is that handle = nil. Besides that, I don't >understand fully how to be passing back and forth parameters to the >dlls. This example cause the interactive ruby to crash (terminates in >an unusual way). I know this isn't all that's needed to work with the >phidgets, but i'm just trying to go step by step and even get it setup >correctly. > >download the phidget21.dll >(http://www.smithaaronlee.net/downloads/phidget21.dll), i've posted the >dll online. Also, here is a direct link to the C API >:http://www.phidgets.com/documentation/C_API_Manual_Phidget21.pdf > >any help, hints or tips would be much appreciated. > The following code will work for you: require 'dl' Phidget21 = DL.dlopen('phidget21') CPhidgetRFID_create = Phidget21['CPhidgetRFID_create', 'LP'] handleptr = [0].pack('L').to_ptr CPhidgetRFID_create.call(handleptr) handle = handleptr.to_i CPhidget_open = Phidget21['CPhidget_open', 'ILI'] CPhidget_open.call( handle,-1 ) Or require 'Win32API' CPhidgetRFID_create = Win32API.new('phidget21.dll','CPhidgetRFID_create','P','I') CPhidget_open = Win32API.new('phidget21.dll','CPhidget_open','LI','I') handleptr = [0].pack('L') CPhidgetRFID_create.call(handleptr) handle = handleptr.unpack('L')[0] CPhidget_open.call(handle,-1) Regards, Park Heesob _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/