POlegin
1

Ошибка IEnumOPCItemAttributes::Next

10.02.2010, 14:14. Показов 2036. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!!! Есть такая проблема. Я пишу свой OPC сервер, и мне нужно реализовать интерфейс IEnumOPCItemAttributes, т.е. это обычный перечеслитель вроде IEnumXXX. Так вот, вся проблема в вызове из клиента метода Next этого интерфейса! Если сервер не запущен, то тогда всё проходит нормально, клиент подключается к серверу, запускается приложение-сервер и т.д. Но если сервер уже запущен клиент подключается к нему, но метод Next возвращает ошибку "Номер находится за пределами допустимого диапазона"!!! В чём дело я не пойму.

Вот код метода Next на сервере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
HRESULT __stdcall TEnumOPCItemAttributes::Next(
    ULONG celt,
    OPCITEMATTRIBUTES **ppItemArray,
    ULONG *pceltFetched)
{
    if( celt == 0 )
    {
        return E_INVALIDARG;
    }
 
    ULONG new_celt = celt;
 
           //m_pItems - это просто указатель на std::vector
    if( m_cIndex >= (*m_pItems).size() )
    {
        *pceltFetched = 0;
        return S_FALSE;
    }
 
    if( new_celt + m_cIndex > (*m_pItems).size() )
    {
        new_celt = (*m_pItems).size() - m_cIndex;
    }
 
    (*ppItemArray) = (OPCITEMATTRIBUTES*)CoTaskMemAlloc(sizeof(OPCITEMATTRIBUTES)*new_celt);
    if( (*ppItemArray) == NULL )
    {
        return E_OUTOFMEMORY;
    }
 
    (*pceltFetched) = new_celt;
 
    ULONG i;
    int j;
 
    for( i = m_cIndex, j = 0; i < new_celt + m_cIndex; i++, j++ )
    {
        (*ppItemArray)[j].szAccessPath = NULL;
        (*ppItemArray)[j].szItemID = AllocString((*m_pItems)[i]->Name.c_str());
 
        if( (*ppItemArray)[j].szItemID == NULL )
        {
            return E_OUTOFMEMORY;
        }
 
        (*ppItemArray)[j].bActive = (*m_pItems)[i]->Active;
        (*ppItemArray)[j].hClient = (*m_pItems)[i]->ClientHandle;
        (*ppItemArray)[j].hServer = (*m_pItems)[i]->ServerHandle;
        (*ppItemArray)[j].dwAccessRights = (*m_pItems)[i]->AccessRights;
        (*ppItemArray)[j].dwBlobSize = 0;
        (*ppItemArray)[j].pBlob = NULL;
        (*ppItemArray)[j].vtRequestedDataType = (*m_pItems)[i]->VarType;
        (*ppItemArray)[j].vtCanonicalDataType = (*m_pItems)[i]->VarType;
        (*ppItemArray)[j].dwEUType = OPC_NOENUM;
        VariantInit(&((*ppItemArray)[j].vEUInfo));
        (*ppItemArray)[j].vEUInfo.vt = VT_EMPTY;
    }
 
    m_cIndex += new_celt;
 
    return S_OK;
}
А вот вызывающий код со стороны клиента:
C++
1
2
3
4
5
6
7
8
9
ULONG* pFetch = (ULONG*)CoTaskMemAlloc(sizeof(ULONG));
//ULONG pFetch;
OPCITEMATTRIBUTES* Attr = NULL;
 
hr = pOPCAttr->Next(1,&Attr,pFetch);
if( FAILED(hr) )
{
//Ошибка : "Номер находится за пределами допустимого диапазона"
}
Заранее Спасибо!
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2010, 14:14
Ответы с готовыми решениями:

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к...

Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи!
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error).
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление записи в файл, но после...

ASP: Response.Redirect - не работает, ошибка `500 - Внутренняя ошибка сервера'
Всем привет! Есть в ASP-сраничке такой код: Response.Redirect 'page1.asp?ReturnTo=page2.asp' ...

0
10.02.2010, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2010, 14:14
Помогаю со студенческими работами здесь

Загружается до окна приветствия и вылетает ошибка: isass.exe - Системная ошибка
Ребята, помогите кто может... весь день бьюсь безрезультатно... с утра пришёл на работу а сервак...

Ошибка разбора XML/ Ошибка при вызове метода контекста (Прочитать)
1C 8.2 Документооборот КОРП 1.2 Текст ошибки...

Django Ошибка доступа (403) Ошибка проверки CSRF. Запрос отклонён
На хостинге разместил сайт и не могу войти в админку, т.к. возникает 403 ошибка &quot;Ошибка доступа...

Ошибка SQL запроса , в базе работает, а через IBQuery в Delphi ошибка
В Combobox загружены имена организаций. Нужно выполнить запрос на вывод всех полей таблицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru