Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не вызываются методы контрола. 
:(
    Опции темы
torero
Дата 9.11.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



     Совсем просто задать вопрос не получается, извините напишу подлиннее.
   Сделал контрол ATL-ActiveX. Называется AtlDiceObj. В контроле есть метод :
Код

                   STDMETHODIMP CATLDiceObj::RollDice()
                   { ::MessageBox(NULL,"Вход в RollDice",NULL,MB_OK);        // это сообщение для контроля- работает метод или нет.
           if(::IsWindow(m_hWnd))  SetTimer(1, 250); 
         return S_OK;
                   }

   Сделал контейнер. При подключении контрола в контейнере появился класс CAtlDiceObj и в нём метод:
                   void CATLDiceObj::RollDice()
Код

                   {   TRACE("Conter-RollDice-вход");
            InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
                        TRACE("Conter-RollDice-выход");
                   }

   Вызываю метод:
 
Код

                      CATLDiceObj atldo; 
                       atldo.RollDice();
                       CView::OnLButtonDown(nFlags, point);   }
 
  Срабатывает только вывод  Conter-RollDice-вход и Debuger выдаёт программное прерывание. Т.е. InvokeHelper(...) вызвали, а связь с STDMETHODIMP CATLDiceObj::RollDice() отсутствует.
   Если нажать кнопку - Прервать, то в окне Output будет  утечка памяти, если нажать -Повтор, то выводится листинг Aссемблера с точкой прерывания.
   Назвать причину ошибки вот так, наверно невозможно, но может быть утечка памяти о чём-то говорит, откуда она здесь?
   И как вообще искать здесь ошибку в (наверно) интерфейсе?
   P.S.   Изменение "свойств" через DDX проходит нормально.
   
PM MAIL   Вверх
Gor777
Дата 9.11.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

       CComQIPtr<CATLDiceObj> atldo; 
       if (atldo)   atldo->RollDice();

PM MAIL   Вверх
torero
Дата 10.11.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



  Gor777,  эти два оператора дают пять ошибок трансляции.  И вообще-то, помоему это из другой темы. Тоже ATL, но не ActiveX.
PM MAIL   Вверх
torero
Дата 12.11.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



     Кажется я нашёл причину, но не знаю, как её исправить.
 Контрол ActiveX размещается в диалоговом окне контейнера и его ID=IDC_ATLDICEOBJ. У контрола есть свойство, которое передаётся контейнеру и назад через DDX.
Код

                 void CActXDial::DoDataExchange(CDataExchange* pDX)
                 {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CActX)
                    DDX_OCShort(pDX,IDC_ATLDICEOBJ,2,m_DiceColor);
       //}}AFX_DATA_MAP
                 }

 Свойство передаётся правильно, казалось бы всё работает OK. Но, когда я набрал в меню View->ClassWizard (хотел добавить метод), то выскочила ошибка: 
                  Parsing Error: Expected "DISPID",
                  InputLine: " DDX_OCShort(pDX,IDC_ATLDICEOBJ,2,m_DiceColor);"
Т.е. или диалоговому окну, или оператору DDX требуется DISPID, но чему он здесь должен быть равен, и как его задать?
PM MAIL   Вверх
Gor777
Дата 20.11.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Что то мне второй пост жутко напоминает MFC контрол а не ATL...

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


 




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


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

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