Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание коллекции с использованием ATL! 
:(
    Опции темы
vovik4385
Дата 12.11.2013, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



Здравствуйте столкнулся с такой проблемой:
Создал я СОМ сервер на с++ и клиент на VB вроде все работает!но только при нажатии кнопки DRAW в клиенте выдается ошибка runtime error 5 invalid procedure call or argument!но что самое интересное в среде разработки VB кнопка работает, в чем может быть причина? 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Squiggle_Collection_2.rar 44,09 Kb
PM MAIL   Вверх
xvr
Дата 12.11.2013, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6984
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 222



Судя по вот этому -
Код

STDMETHODIMP CSquiggleCollection2::Item(VARIANT index, VARIANT *pItem)
{
    // Be sure we have a long.
    if(index.vt == VT_I2)
    {        
...
    }

    return E_INVALIDARG;
}
у вас в строке if(index.vt == VT_I2) тип варианта оказался не I2 (это кстати не long, а short). И метод Item вернул INVALIDARG, что вы и получили в сообющении от VB.

Опишите ваш индекс в BetterSquiggleCollection.idl как Long а не VARIANT, система сама вам приведет тип к целому, и сама обругается, если это не получится


PM MAIL   Вверх
vovik4385
Дата 12.11.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : error C2259: 'CComObject<class CSquiggleCollection2>' : cannot instantiate abstract class due to following members:
        c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CSquiggleCollection2> >::CreateInstance(void *,const struc
t _GUID &,void ** )'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : warning C4259: 'long __stdcall ISquiggleCollection2::Item(long,struct tagVARIANT *)' : pure virtual function was not defined
        e:\òðåëüñåí ý. - ìîäåëü com è ïðèìåíåíèå atl 3.0\samples\chapter 11\squiggle collection 2\bettersquigglecollection.h(98) : see declaration of 'Item'
        c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CSquiggleCollection2> >::CreateInstance(void *,const struc
t _GUID &,void ** )'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : error C2259: 'CComObject<class CSquiggleCollection2>' : cannot instantiate abstract class due to following members:
        c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CSquiggleCollection2> >::CreateInstance(void *,const struc
t _GUID &,void ** )'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : warning C4259: 'long __stdcall ISquiggleCollection2::Item(long,struct tagVARIANT *)' : pure virtual function was not defined
        e:\òðåëüñåí ý. - ìîäåëü com è ïðèìåíåíèå atl 3.0\samples\chapter 11\squiggle collection 2\bettersquigglecollection.h(98) : see declaration of 'Item'
        c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CSquiggleCollection2> >::CreateInstance(void *,const struc
t _GUID &,void ** )'


вот ято мне компилятор выдал!!!
PM MAIL   Вверх
vovik4385
Дата 12.11.2013, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



Мне кажется дело не в этом(так как тогда бы и другие кнопки не работали бы ) а то не работает только одна кнопка DRAW?
PM MAIL   Вверх
xvr
Дата 12.11.2013, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6984
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 222



Цитата(vovik4385 @  12.11.2013,  18:22 Найти цитируемый пост)
вот ято мне компилятор выдал!!! 
Правильно выдал - где функция  'long __stdcall ISquiggleCollection2::Item(long,struct tagVARIANT *)'? У вас теперь параметр не VARIANT* а long

Цитата(vovik4385 @  12.11.2013,  21:04 Найти цитируемый пост)
Мне кажется дело не в этом(так как тогда бы и другие кнопки не работали бы ) а то не работает только одна кнопка DRAW? 

У других кнопок вызов Item другой (или вообще нет), вот они и работают

Отладчиком не пробовали смотреть, как ваш код себя ведет? Очень помогает  smile 
PM MAIL   Вверх
vovik4385
Дата 12.11.2013, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



xvr, не могли бы вы попробывать запустить?
PM MAIL   Вверх
xvr
Дата 13.11.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6984
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 222



Запустил, у меня все работает.

Поменял тип параметра на LONG - опять все работает:

IDL file:
Код

        [id(DISPID_VALUE), helpstring("method Item")] 
        HRESULT Item([in] LONG index, [out, retval] VARIANT* pItem);


SquiggleCollection2.h (строка 72)
Код

    STDMETHOD(Item)(/*[in]*/ long index, /*[out, retval]*/ VARIANT* pItem);


SquiggleCollection2.cpp (специально не стирал, а закоментарил лишнее)
Код

STDMETHODIMP CSquiggleCollection2::Item(/*VARIANT*/ long index, VARIANT *pItem)
{
    // Be sure we have a long.
//    if(index.vt == VT_I2)
    {        
        // Be sure we are in range.
        if(index /*.lVal*/ >=0 && index /*.lVal*/ <= m_vecSquiggles.size())
        {
            // Find the correct squiggle.
            IDispatch* pDisp = m_vecSquiggles[index /*.lVal*/ ];
            
            // Add the ref!
            pDisp->AddRef();
            
            // Set the type of VARIANT and return
            pItem->vt = VT_DISPATCH;
            pItem->pdispVal = pDisp;
            return S_OK;
        }
    }

    return E_INVALIDARG;
}

PM MAIL   Вверх
vovik4385
Дата 13.11.2013, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



А в чем тогда причина может быть?
PM MAIL   Вверх
vovik4385
Дата 13.11.2013, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



А в чем тогда причина может быть?
PM MAIL   Вверх
vovik4385
Дата 13.11.2013, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



после того как я исправил код, ТЕПЕРЬ ОШИБКА при нажатии кнопки DRAW что обнаружена ошибка и приложение будет закрыто извините за неудобства? и при отладке ошибка доступа?

Это сообщение отредактировал(а) vovik4385 - 13.11.2013, 22:01
PM MAIL   Вверх
vovik4385
Дата 13.11.2013, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



отладил выдает ошибку (KERNELBASE.DLL) 0xC00000F float inexact result!!Как можно решить эту проблему?
PM MAIL   Вверх
xvr
Дата 14.11.2013, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6984
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 222



Запустите ваш COM сервер под отладчиком:
  • Включите Debug режим при сборке
  • В свойствах проекта на странице Debug введите имя вашего VB пускача в параметр Command
  • Запустите ваш проект под дебагером (F5)

PM MAIL   Вверх
vovik4385
Дата 14.11.2013, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



я запускал под отладчиком, отладил выдает ошибку (KERNELBASE.DLL) 0xC00000F float inexact result

Добавлено через 7 минут и 58 секунд
как можно решить эту проблему?
PM MAIL   Вверх
xvr
Дата 14.11.2013, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6984
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 222



Цитата(vovik4385 @  14.11.2013,  17:55 Найти цитируемый пост)
я запускал под отладчиком, отладил выдает ошибку (KERNELBASE.DLL) 0xC00000F float inexact result

Где именно выдает? Он должен показать строку в вашем коде.

PM MAIL   Вверх
vovik4385
Дата 15.11.2013, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.11.2013

Репутация: нет
Всего: нет



первая строчка в функции item?
PM MAIL   Вверх
Google
  Дата 20.5.2019, 18:21 (ссылка)  





  Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0995 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.