2013-08-20 23 views
2

我嘗試爲C#方法創建COM組件,然後嘗試使用javascript訪問此方法。Javascript Com數組給我錯誤的數組值

我已經爲創建共享程序集運行GACUtil -i和Regasm/Codebase命令,並且還成功註冊到註冊表中。 這是我的C#方法,它爲此返回一個int []數組,爲此方法創建一個COM組件。 nChannelsCount = 15這是用在for循環

[Guid("4794D615-BE51-4a1e-B1BA-453F6E9337C4")] 
    [ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
    [ComSourceInterfaces(typeof(IComOjbect))] 
    public class MyComObject : IComOjbect 
    { 

enter image description here
}

[Guid("4B3AE7D8-FB6A-4558-8A96-BF82B54F329C")] 
    [ComVisible(true)] 
public interface IComOjbect  
    {  
    [DispId(0x10000009)]  
     int[] GetData(int index); 
    } 

但是,當我訪問此方法在JavaScript它給了我,只是計數的15,但我想5500在快速觀看中顯示該節目。我不知道如何做到這一點的JavaScript來實現這一目標代碼,但我仍然嘗試這段JavaScript代碼如下

<html> 
<head> 
<title>My Com Component</title> 
<object id="myComComponent" name="myComComponent" classid="clsid:4794D615-BE51-4A1E-B1BA-453F6E9337C4"> 
</object> 
<script language="javascript" type="text/javascript">   
function MyComComponent_onload() 
    {    
     try { 
      var nAllData = []; 
      for (var index = 0; index < 15; index++) 
      { 

       nAllData.push(myComComponent.GetData(index)); 
       } 
      alert(nAllData.length); 
      }    
     catch (err) {    
     alert(err.message);  
     }   
    } 
</script> 
</head> 
<body onload="MyComComponent_onload();" onunload="MyComComponent_onunload();"> 
</body> 
</html> 
+2

所以,你想你的數組在JS中是5500長,但只想填充它的前15個值? – Medinoc

+1

@Medinoc他從COM組件中返回5500長度的數組中的組件從上面的場景提到他在question.in javscript他獲得數組長度(15),而不是(5500)....警報(nAllData.length)他得到陣列長度15; –

+0

@Medinoc我想快速監視數組(顯示在屏幕截圖中)到JavaScript數組中。 – IMMORTAL

回答

1

GetData返回數組。 JavaScript代碼調用它15次,並且每次將結果推送到另一個數組,名爲nAllData(JavaScript中的變量名與C#中的變量名相同的事實是無關緊要的 - 它們無關)。因此,您有一個15個元素的數組,其中每個元素又是一個數組(大概是5500個元素 - 無論返回的是GetData)。

GetData實現中的循環沒有意義 - 該函數在該循環的第一次迭代中返回。目前還不清楚你在那裏想達到什麼。

最後,我不相信JavaScript可以直接使用安全數組(我相信GetData的返回值最終由COM互操作代表)。試試這個:

var data = new VBArray(myComComponent.GetData(index)).toArray(); 
alert(data.length); 
nAllData.push(data); 
+0

我試過你的解決方案,但它給了我錯誤,如「VBArray:參數不是VBArray對象。」 – IMMORTAL

+0

如果你簡單地做'var data = myComComponent.GetData(index);'會發生什麼?我必須承認我對.NET COM互操作並不是很熟悉,我不確定.NET的數組在COM方面會是什麼樣子。 –

+0

它迭代循環15次,但不給我nDataArray如快速手錶 – IMMORTAL