如何将SAFEARRAY从C#返回到COM(Javascript)?

时间:2013-08-13 12:51:47

标签: c# javascript html com

这是我的C#代码我的GetChannelSample()方法return an int[] array我想将此数组访问为javascript,但我不知道该怎么做?

[Guid("4794D615-BE51-4a1e-B1BA-453F6E9337C4")] 
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
class Test:IComOjbect
{
            private int[] nAllData;
            public int[] GetChannelSample(int channelIndex)
            {
             //Some Logic here that will return integer type of array{1,12,15,48,1452,45,100,01}
              return nAllData;
            }
}

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

我为此我使用Gacutil和Regasm命令创建了COM组件,以便com组件可以在javascript中轻松访问但我不知道如果我的C#方法retrn int []数组并使用javascript数组访问它,如何返回。

1 个答案:

答案 0 :(得分:0)

如果这是某种处理程序,您只需将结果序列化为JSON并在客户端上反序列化它:

使用JSON.NET

string json = JsonConvert.SerializeObject(GetChannelSample(channelIndex));
this.Context.Response.ContentType = "text/plain";
this.currentContext.Response.Write(json);

或Javascript Serializer

JavascriptSerializer ser = new JavaScriptSerializer();
string json = ser.Serialize(GetChannelSample(channelIndex));
this.Context.Response.ContentType = "text/plain";
this.currentContext.Response.Write(json);

在客户端:

function onAjaxSuccess (data){
    var myArr = JSON.parse(data);
}