2011-05-24 161 views
1

我有一個web服務,它包裝一個COM對象的函數以減少RPC通信錯誤。我傳遞給特定Web服務的參數是string[]。一個問題似乎在於COM對象函數,它需要一個對象引用。將字符串[]作爲對象引用傳遞給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); 
} 

有沒有其他人遇到這個問題?

+0

您無法將對象傳遞給COM,它不知道對象是什麼。你將不得不編組。 http://msdn.microsoft.com/en-us/library/aa719715(v=vs.71).aspx和http://msdn.microsoft.com/en-us/library/aa719861(v=vs.71 ).aspx – Hogan 2011-05-24 21:44:27

回答

0

我認爲這篇文章應該可以幫助您設置com interop的編組。

http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx

+0

我發現[這個pdf](http://justlikeamagic.files.wordpress.com/2010/03/marshaling-with-c-pocket-reference.pdf),它以一種非常簡單的方式解釋了編組。我將創建一個包裝COM對象DLL的類。我相信C#代碼將能夠執行那個類,然後編組這些變量......我從來沒有料到在C#中執行COM對象會很困難。 – 2011-05-25 19:57:41

+0

這確實需要相當數量的管道,但好的一點是,一旦你掌握了這一點,並且如果需要的話,繼續增加更多內容應該很容易。 – 2011-05-25 19:58:57