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