Forum Discussion

aditya_nerkar's avatar
aditya_nerkar
Occasional Contributor
12 years ago

System.InvalidCastExcecption while trying to call a C# routine which accepts String arrays as parameters

Hi,

I am trying to call a C# method which accepts array parameters.

Everything is setup properly via CLRbridge and I can access the c# method.



But when I make the call, I see this message

system.invalidcastexception:unable to cast com object....



//my sample jscript code:

var strarray = new Array();

strarray[0]= "1";

var strarray1 = new Array();

strarray1[0]= "1";

//checkArray is the C# method

dotNET.ClassLibrary1.Program1.checkArray(strarray,strarray1);

//--------------------







//and my sample c# code

 public   static void  checkArray(String [] a1, String[]  a2)

{

    var results = a1.Except(a2, StringComparer.OrdinalIgnoreCase);

}

1 Reply

  • aditya_nerkar's avatar
    aditya_nerkar
    Occasional Contributor
    the way to tackle this is to make everything an object in the c# code.



    public   static Object [] checkArray(Object [] a1, Object []  a2)

    {

        var results = a1.Except(a2);

        Object[] result = results.ToArray();

        return result;

    }



    and in your TestComplete code use, this function provided by smart bear to convert your JScript array into a variant array,.

    function ConvertJScriptArray(JScriptArray)

    {

      // Uses the Dictionary object to convert a JScript array

      var objDict = Sys.OleObject("Scripting.Dictionary");

      objDict.RemoveAll();

      for (var i in JScriptArray)

        objDict.Add(i, JScriptArray);

      return objDict.Items();

    }







    /my sample jscript code:

    var strarray = new Array();

    strarray[0]= "1";

    var strarray1 = new Array();

    strarray1[0]= "1";

    //checkArray is the C# method

    dotNET.ClassLibrary1.Program1.checkArray(ConvertJScriptArray(strarray),ConvertJScriptArray(strarray1));