【问题标题】:Type mis match error in javascript while calling C# COM component调用 C# COM 组件时在 javascript 中键入不匹配错误
【发布时间】:2013-08-13 11:17:20
【问题描述】:

我在 C# 中创建了一个 Com 组件并尝试在 Javascript 中访问。

我的 C# 方法是

Class myComComponent
{
    private int[] nAllData;    
    public int[] GetArray(int index)
            {
              //Some Logic here that will return integer type of array{1,12,15,48,1452,45}
                return nAllData;
            }
}

从 javascript 调用它,但它给了我一个类型不匹配的错误。

Javascript 代码

 function MyComComponent_onload() {
           try {
               var nAllData = new Array();
               for (var i = 0; i<= 5; i++)
                   {
                        nAllData.push(myComComponent.GetArray(i));
                     }
                }
                catch (err) 
                {
                    alert(err.message);
                }
            }
    <html>
    <head>
 <object id="myComComponent" name="myComComponent" classid="clsid:4794D615-BE51-4A1E-B1BA-453F6E9337C4">
    </head>
    <body onload="MyComComponent_onload();">
    //// Html Code goes here
    </body>
    <html>

【问题讨论】:

  • 你的 c# 函数返回一个整数数组,所以你需要在你的 javascript 中使用一个二维数组来存储这些数组......我是对的吗?
  • @Giwrgos Tsopanoglou 我该怎么做。我不知道如何转换它。你能简单告诉我吗
  • 我从未结合过 c# 和 javascript,而且我也不是专家。也许您可以尝试在 for 循环中添加“nAllData[i] = new Array()”。

标签: c# javascript html c#-4.0 com


【解决方案1】:

JavaScript 只能使用 COM 的自动化兼容子集。整数数组不属于该子集。

您需要返回一个 VARIANT 的 SAFEARRAY 以与 JavaScript 兼容,或者返回一个具有 IEnumVariant 接口的对象(这样 foreach 可以工作),以及带有索引默认属性的 IDispatch (所以使用方括号进行索引)。

【讨论】:

  • 我认为你的方法是正确的,你能给我举个例子更好地理解
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多