On Nov 15, 10:41 am, zxem <david.z... / gmail.com> wrote: > On Nov 14, 5:56 pm, Jano Svitok <jan.svi... / gmail.com> wrote: > > > > > On Nov 14, 2007 6:05 PM, zxem <david.z... / gmail.com> wrote: > > > > > On Nov 14, 2007 1:10 PM, zxem <david.z... / gmail.com> wrote: > > > > > > All, > > > > > > I am using Ruby 1.8.6 now and trying to so a pass by reference COM > > > > > call through win32ole. > > > > > > The code looks like this: (I am not really calling Excel) > > > > > > ------------------------------------------------------ > > > > > excel = WIN32OLE.new("excel") > > > > > excel.getCell(cell, column, row) > > > > > --------------------------------------------------- > > > > > > The first parameter I need to pass into getCell on line2 is a complex > > > > > object(not String/double). > > > > > Could anyone please teach me how to do this call in Ruby? > > > > Hi, > > > > I went through all the existing threads before I posted this one > > > because I did not fully understand them. Could anyone give me some > > > more detailed examples. > > > Can you specify the problem in more detail? Is it that > > > (1) you need to pass an object to the method, > > or > > (2) the method returns the complex object, and you actually do not > > need to pass it in, > > or > > (3) both? > > > If you can specify the exact API (if it is public) it would be easier > > to help you. > > So for now: > > > for (1) I think that's easy. WIN32OLE.new(type) > > > for (2): try passing 0 or nil as the parameter, and read the result > > from WIN32OLE::ARGV.first > > if 0/nil doesn't work then create an empty object and pass that. Try > > inspecting ARGV to find out what stuff does it contain. > > > (I don't remember why but) in some cases I used > > WIN32OLE#invoke(method, *args) to call the COM object. > > Great thanks for your help. > > Option 2 solved my problem. > > My sample code: > ------------------ > > curve.getNonWingProperties( > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0); > > tenor_date_out = WIN32OLE::ARGV[0]; > domestic_currency_out = WIN32OLE::ARGV[1]; > foreign_currency_out = WIN32OLE::ARGV[2]; > is_face_domestic_out = WIN32OLE::ARGV[3]; > is_booking_domestic_out = WIN32OLE::ARGV[4]; > ATM_style_out = WIN32OLE::ARGV[5]; > atTheMoneyVolatility_out = WIN32OLE::ARGV[6]; > atTheMoneyVolIsMissing_out = WIN32OLE::ARGV[7]; > puts tenor_date_out.GetSerialDouble; Hi all, I raised a bug related to win32ole.c weeks ago. Could anyone who is interested in this topic take a look at this http://rubyforge.org/tracker/index.php?func=detail&aid=15020&group_id=426&atid=1698? Cheers! Xin Zhao