[Ironruby-core] COM Interop Problem

Jim Deville jdeville at microsoft.com
Fri Feb 19 11:10:33 EST 2010

Just so you know, the WIN32OLE library wraps the COM initialization and removes the need for to_clr_string.

Require 'win32ole'
WIN32OLE.new 'Excel.Application'

This will also be cross compatible with MRI.

Tomas: Can we make Shane's case work without requiring the cast to CLR string?


-----Original Message-----
From: Shane Emmons <semmons99 at gmail.com>
Sent: Friday, February 19, 2010 7:02 AM
To: ironruby-core at rubyforge.org <ironruby-core at rubyforge.org>
Subject: Re: [Ironruby-core] COM Interop Problem

On Thu, Feb 18, 2010 at 3:42 PM, Shane Emmons <semmons99 at gmail.com> wrote:
> Anytime I invoke a method on a COM object with one or more arguments,
> I get the following error:
>  Could not convert argument 0 for call to Open. (ArgumentError)
> What's preplexing is the argument number is always the last argument,
> so if there are four arguments, the error will be on argument 3. Here
> is an example script that gives the error above:
> def new_com_object(prog_id)
>  System::Activator.CreateInstance(System::Type.GetTypeFromProgID(prog_id))
> end
> xls = new_com_object('Excel.Application')
> xls.Visible = true
> xls.Workbooks.Open('c:\\Book1.xls')
> --
> Shane Emmons

I figured it out, needed to to String#to_clr_string on every argument.

Shane Emmons
Ironruby-core mailing list
Ironruby-core at rubyforge.org

More information about the Ironruby-core mailing list