C# 将字符串[]作为对象引用传递给COM对象

C# 将字符串[]作为对象引用传递给COM对象,c#,asp.net,web-services,com,C#,Asp.net,Web Services,Com,我有一个Web服务,它包装COM对象的函数,以减少RPC通信错误。我传递给特定web服务的参数是字符串[]。COM对象函数中似乎存在一个问题,它需要对象引用 一些错误会显示在网页上,因为它们来自COMClass错误87,其他是编译器错误。我试着指出下面哪个是哪个 [WebMethod(EnableSession=true)] public int WSFunc(string[] StringArray){ //object StringArr = (object)((object[])S

我有一个Web服务,它包装COM对象的函数,以减少RPC通信错误。我传递给特定web服务的参数是字符串[]。COM对象函数中似乎存在一个问题,它需要对象引用

一些错误会显示在网页上,因为它们来自COMClass错误87,其他是编译器错误。我试着指出下面哪个是哪个

[WebMethod(EnableSession=true)]
public int WSFunc(string[] StringArray){
    //object StringArr = (object)((object[])StringArr); //returns error 87 in webpage log
    //object StringArr = (object)StringArr; //returns error 87 in webpage log

    //public override int COMClass.Func(ref object pStringList)
    return COMClass.Func(ref StringArr);

    //return COMClass.Func(ref StringArray); //Doesn't build, cannot convert from 'ref string[]' to 'ref object' (CS1503)

    //return COMClass.Func(ref (object)StringArr);  //Doesn't build, A ref or out argument must be an assignable variable (CS1510)
}
此外,这会产生相同的结果错误87-参数不正确:

[WebMethod(EnableSession=true)]
public string WSFunc(string[] StringArray){
    object[] StringObj = new object[StringArray.Length];
    for(int i = 0; i < StringArray.Length; i++){
        StringObj[i] = StringArray[i];
    }

    object MyString = (object)StringObj;
    return ComClass.Func(ref MyString);
}

还有其他人遇到过这个问题吗?

我认为这篇文章应该可以帮助您为com互操作设置编组


您不能将对象传递给COM,它不知道对象是什么。你必须对它进行封送。我发现这用一种非常简单的方式解释了编组。我将创建一个类来包装COM对象DLL。我相信C代码将能够执行该类,然后该类将封送变量。。。我从来没有想到在C中执行COM对象会如此困难。它确实需要相当多的管道,但好的是,一旦你开始这样做,如果你需要的话,继续添加更多应该很容易。