Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2012, 18:39   #11
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

А на Delphi хотя бы можно пример? Или любой другой язык
koljsch вне форума Ответить с цитированием
Старый 21.09.2012, 19:34   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я давно не работал с интерфесами, поэтому не хочу выкладывать мутные предположения.
Попробуй почитай статью :
http://www.rsdn.ru/article/com/introcom.xml#ENE
http://etonetak.ru/%D1%81%D1%82%D0%B...81-%D0%B2-CPP/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2012, 19:45   #13
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Хорошо, спасибо Вам!
Постараюсь разобраться
koljsch вне форума Ответить с цитированием
Старый 21.09.2012, 19:49   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Давай. Уж извини что не помог примером. Просто в этой части области не работаю практически совсем.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2012, 19:54   #15
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Вы еще просите извинений?! Вы очень сильно мне помогли и уже не раз!
СуперМодератор действительно))
koljsch вне форума Ответить с цитированием
Старый 21.09.2012, 22:34   #16
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Ух, как там все сложно))
Ладно, может в этом загвоздка. У COM объекта есть функция add_GetModuleMessageEvent, которая принимает всего один параметр _EventDelegate-он также описан в h файле как интерфейс. Как не пытался, то не смог его объявить. Как я понимаю, то эта функция добавляет обработчик событий.
Но как объявить этот интерфейс _EventDelegate?
Еще одно, у объекта во вкладке Events есть событие, которое по названию как раз вроде то, что нужно, но оно не работает не при каких обстоятельствах. А при ведение лог файла указывается ошибка на то, что отсутствуют переменные в add_GetModuleMessageEvent.
Что делать чтобы это все исправить?
koljsch вне форума Ответить с цитированием
Старый 21.09.2012, 22:39   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как я понимаю, то эта функция добавляет обработчик событий.
Покажи ее спецификацию.
Цитата:
Но как объявить этот интерфейс _EventDelegate?
Не интерфейс, ИМХО, нужно объявлять а просто передать туда указатель на делегат.
Цитата:
у объекта во вкладке Events есть событие
А тип объекта какой? Не интерфейс-то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2012, 22:47   #18
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Тип как положено void __fastcall.
Есть описание в объекте, объект кстати тоже как интерфейс. Вот описание
Код:
virtual HRESULT STDMETHODCALLTYPE add_GetModuleMessageEvent(Module_tlb::_EventDelegate* value/*[in]*/) = 0; // [-1]
Имеется еще вот такое
Код:
  HRESULT         __fastcall add_GetModuleMessageEvent(Module_tlb::_EventDelegate* value/*[in]*/);
Код:
template <class T> HRESULT __fastcall
_ModuleDispT<T>::add_GetModuleMessageEvent(Guardagent2_tlb::_EventDelegate* value/*[in]*/)
{
  _TDispID _dispid(*this, OLETEXT("add_GetModuleMessageEvent"), DISPID(DISPID_UNKNOWN/*[1610743812]*/));
  TAutoArgs<1> _args;
  _args[1] = (LPDISPATCH)(Module_tlb::_EventDelegate*)value /*[VT_USERDEFINED:1]*/;
  return OleFunction(_dispid, _args);
}
Все. Кстати, что самое интересное, в исходнике COM библиотеке нет совершенно никакого указания на данную функцию, т.е. C++ сам ее добавил
koljsch вне форума Ответить с цитированием
Старый 22.09.2012, 04:10   #19
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Вот более подробная ошибка в лог файле
Код:
Ошибка на сервере. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
   at Module.ModuleEvents.GetModuleMessageEvent(Object Message)
   at Module.Module.ModuleThread_ReceiveMessage()
   at Module.Module.ModuleThread()
А вот это код из COM, объявление в ModuleEvents:
Код:
    public interface ModuleEvents
    {
        void GetModuleMessageEvent([MarshalAs(UnmanagedType.IDispatch)] object Message);
    }
koljsch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00