Thanks Shay.

OK your code works. But my trouble seems to come in with the Generic
method.

When I do:

public class Class1
    {
        public string DoSomething(ref string test)
        {
            test = test + "tamtamtam";

            return "return value";
        }

        public string DoSomethingElse<T>(ref T test)
        {
            return test.ToString();
        }
    }

and then call it from IR:


>>> c = TestClass::Class1.new
=> TestClass.Class1
>>> c.do_something("Bla")
=> ['return value', 'Blatamtamtam']
>>> c.do_something_else("Bla")
Microsoft.Scripting.Core:0:in `Bind': Expression of type
'IronRuby.Builtins.Muta
bleString&' cannot be used for parameter of type
'IronRuby.Builtins.MutableStrin
g' of method 'System.String
DoSomethingElse[MutableString](IronRuby.Builtins.Mut
ableString ByRef)' (ArgumentError)
        from Microsoft.Scripting.Core:0:in `BindCore'
        from :0




On Thu, Feb 11, 2010 at 4:12 PM, Shay Friedman <shay.fried...@gmail.com>wrote:

> It returns another return value with the new ref value.
>
> For example, if you have the next c# class:
> public class Class1
> {
>     public string DoSomething(ref string test)
>     {
>         test = test + "tamtamtam";
>
>         return "return value";
>     }
> }
>
> This is the IronRuby code you can write to use it:
> >>> require 'c:\dev\TestApps\TestClass\TestClass\bin\Debug\TestClass.dll'
> => true
> >>> c = Class1.new
> => TestClass.Class1
> >>> str = "hello"
> => "hello"
> >>> result = c.do_something(str)
> => ['return value', 'hellotamtamtam']
>
> Pay attention that the result variable is an array that contains the method
> return value as the first item and the ref value as the second parameter.
>
> Shay.
> --------------------------------------------------------
> Shay Friedman | .NET Technologies Expert | Author of IronRuby Unleashed |
> Sela Technology Center
> Blog: http://IronShay.com | Twitter: http://twitter.com/ironshay
>
>
> On Thu, Feb 11, 2010 at 3:44 PM, Michael Erasmus <michaeleras...@gmail.com
> > wrote:
>
>> Hi Everyone,
>>
>> I'm trying to write a IronRuby script that interops with a a .NET assembly
>> written in C#.
>>
>> It has a class that derives from a base class in the .NET assembly. One of
>> the base class protected methods looks like this:
>>
>> protected void OnNotifyPropertyChanged<T>(string name, ref T localmember,
>> T value)
>>  {
>>          ......
>>  }
>>
>> I can't for the life of me figure out how to call this method from IR in
>> my derived class.
>> The documentation mentions that you can call *out *parameters without
>> using them as arguments, but I can't seem to find anything about *ref *
>> params.
>>
>> If I just try calling the method like this:
>>
>> OnNotifyPropertyChanged(property_name, value, value)
>>
>> I get this error:
>>
>> *Microsoft.Scripting.Core:0:in `Bind': Expression of type
>> 'IronRuby.Builtins.Muta*
>> *bleString&' cannot be used for parameter of type
>> 'IronRuby.Builtins.MutableStrin*
>> *g' of method 'Void
>> #base#OnNotifyPropertyChanged[MutableString](System.String, I*
>> *ronRuby.Builtins.MutableString ByRef, IronRuby.Builtins.MutableString)'
>> (Argumen*
>> *tError)*
>> *        from Microsoft.Scripting.Core:0:in `BindCore'*
>> *        from ./dynamic_event_item.rb:22:in `method_missing'*
>> *        from :0*
>>
>>
>> Am I missing something?
>>
>> Thanks
>>
>> Michael Erasmus
>>
>>
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core@rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core@rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to