1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Проблема при получении длинной строки с Com+

Тема в разделе ".NET", создана пользователем Valdocco, 7 апр 2010.

  1. Valdocco

    Valdocco Гость

    Репутация:
    0
    Приветствую вас, уважаемые участники форума!
    Я пишу приложение на Visual Studio .NET 2008 Framework 3.5 sp1, которое должно работать с сервером на COM+. Компонент COM+ написан на C++, Studio 6.0
    Клиент запускает на сервере метод, который должен вернуть строку.

    Объявление метода на сервере:
    Код:
    	
    *.h
    STDMETHOD(get_Body)(long index, VARIANT *pVal);
    
    *.cpp
    STDMETHODIMP ActionDataForA3::get_Body(long index, VARIANT *pVal)
    {
    
    _variant_t v; 
    GetItem(index, 0, v); 
    *pVal = v;
    return S_OK;
    }
    Функция GetItem обращается к массиву SafeArray, и вот её текст на всякий случай:
    Код:
    	
    void GetItem(long rowIndex, long fieldIndex, VARIANT& Value)
    {
    ATLASSERT(rowIndex >= 0 && rowIndex < m_RowCount);
    ATLASSERT(fieldIndex >= 0 && fieldIndex < m_FieldCount);
    
    long ind[2];
    ind[0] = rowIndex;
    ind[1] = fieldIndex;
    HRESULT hr = SafeArrayGetElement(m_Data, ind, &Value);
    ATLASSERT(hr == 0);
    }
    В клиенте этот метод вызывается:
    class.get_Body(i)

    В случае если строка небольшая (< 16383 символа), то все в порядке, все корректно отрабатывает. А если больше, то возникет ошибка. Дебагер пишет:
    "Обнаружено недопустимое значение типа VARIANT во время преобразования неуправляемого значения типа VARIANT в управляемый объект. Передача в CLR недопустимого значения типа VARIANT может вызвать неожиданные исключения, а также повреждение или потерю данных."
    Генерится эксепшн:
    "System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

    Если у кого есть идеи, как исправить эту ситуацию, то буду очень благодарен помощи.
    Может нужно использовать другой тип данных на сервере или прописать явно маршалинг?
     
  2. Valdocco

    Valdocco Гость

    Репутация:
    0
Загрузка...
Похожие Темы - Проблема при получении
  1. Jayse
    Ответов:
    9
    Просмотров:
    209
  2. thunder
    Ответов:
    55
    Просмотров:
    1.911
  3. Smorti
    Ответов:
    1
    Просмотров:
    453
  4. Denybxx
    Ответов:
    5
    Просмотров:
    1.599
  5. Artael
    Ответов:
    1
    Просмотров:
    302

Поделиться этой страницей