Передача строки [] в качестве ссылки на объект к COM-объекту

#c# #asp.net #web-services #com

#c# #asp.net #веб-сервисы #com

Вопрос:

У меня есть веб-сервис, который обертывает функции COM-объекта с целью уменьшения ошибок связи RPC. Параметр, который я передаю конкретному веб-сервису, является string[] . Проблема, по-видимому, заключается в функции 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);
}
  

Кто-нибудь еще сталкивался с этой проблемой?

Комментарии:

1. Вы не можете передавать объекты в COM, он понятия не имеет, что такое объект. Вам придется ее маршалировать. msdn.microsoft.com/en-us/library/aa719715 (v=против 71).aspx и msdn.microsoft.com/en-us/library/aa719861 (v=против71).aspx

Ответ №1:

Я думаю, эта статья должна помочь вам настроить маршалинг для com-взаимодействия.

http://msdn.microsoft.com/en-us/library/aa645736 (v=против71).aspx

Комментарии:

1. Я нашел этот pdf файл, который объясняет маршалинг очень простым способом. Я собираюсь создать класс, который оборачивает библиотеку DLL COM-объекта. Я полагаю, что код C # сможет выполнить этот класс, который затем маршалирует переменные… Я никогда не ожидал, что будет так сложно выполнить COM-объект на C #.

2. Это требует изрядного количества настроек, но приятно то, что, как только вы это настроите и начнете работать, будет довольно легко продолжать добавлять больше, если вам нужно.