COM сервер не вызывает события
От: Titov Andrew  
Дата: 01.07.09 19:44
Оценка:
Добрый!

Пишу приложение на c# которое использует com-сервер. com сервер добавил стандартно, через Add Reference, класс обёртка создался и нормально работает — методы вызываются, но когда я добавляю обработчик события com объекта, то этот объект почему-то эти обработчики не вызывает. Я уже несколько дней просматриваю интернет и форум, пробовал удалять [STAThread], пробовал ставить [MTAThread], это не помогло.

Вот небольшой код который, собственно, всё делает

           private void button1_Click(object sender, EventArgs e)
        {
            SlotFaceClass slotFace =
                new SlotFaceClass();

            slotFace.Connected += new _ISlotFaceEvents_ConnectedEventHandler(slotFace_Connected);
         
            string outMsg;

            slotFace.Connect(
                0,
                "serv",
                "logn",
                "pwd",
                out outMsg);
        }

        void slotFace_Connected(int OpenID, int SlotID, int ResultCode, string ResultMsg)
        {
            MessageBox.Show("Connected!");
        }


Не вызывает события хоть как, в описании com-сервера говорится, что он многопоточный, есть для него пример клиента на vc++ который работает абсолютно нормально и события получает, помогите пожалуйста разобраться, подскажите направление, т.к. уже исчерпал все идеи, не знаю куда двигаться и что попробовать!

Большое спасибо за внимание!
Re: COM сервер не вызывает события
От: Аноним  
Дата: 02.07.09 05:32
Оценка:
Здравствуйте, Titov Andrew, Вы писали:

может сделать смешанный проект Native- Managed C++?
Re[2]: COM сервер не вызывает события
От: Titov Andrew  
Дата: 02.07.09 07:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Titov Andrew, Вы писали:


А>может сделать смешанный проект Native- Managed C++?


Очень бы не хотелось привлекать c++, т.к. с ним у меня всё плохо
Re: COM сервер не вызывает события
От: Аноним  
Дата: 03.07.09 14:39
Оценка:
up
Re: COM сервер не вызывает события
От: TK Лес кывт.рф
Дата: 03.07.09 15:10
Оценка:
Здравствуйте, Titov Andrew, Вы писали:

TA>Не вызывает события хоть как, в описании com-сервера говорится, что он многопоточный, есть для него пример клиента на vc++ который работает абсолютно нормально и события получает, помогите пожалуйста разобраться, подскажите направление, т.к. уже исчерпал все идеи, не знаю куда двигаться и что попробовать!


Например, могут быть заморочки, если интерфейс event sink объявлен как dual. Смотрите внимательнее на то, как работает с++ клиент — что там происходит и как.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: COM сервер не вызывает события
От: algol Россия about:blank
Дата: 03.07.09 15:31
Оценка:
Здравствуйте, Titov Andrew, Вы писали:

TA>           private void button1_Click(object sender, EventArgs e)
TA>        {
TA>            SlotFaceClass slotFace =
TA>                new SlotFaceClass();

TA>            slotFace.Connected += new _ISlotFaceEvents_ConnectedEventHandler(slotFace_Connected);
TA>        }


Определите переменную slotFace как член класса, чтобы COM объект существовал в то время, когда вы собираетесь получать от него события.
Re[2]: COM сервер не вызывает события
От: Аноним  
Дата: 06.07.09 16:02
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Titov Andrew, Вы писали:


A>
TA>>           private void button1_Click(object sender, EventArgs e)
TA>>        {
TA>>            SlotFaceClass slotFace =
TA>>                new SlotFaceClass();

TA>>            slotFace.Connected += new _ISlotFaceEvents_ConnectedEventHandler(slotFace_Connected);
TA>>        }
A>


A>Определите переменную slotFace как член класса, чтобы COM объект существовал в то время, когда вы собираетесь получать от него события.


Определил, то же самое
Re[3]: COM сервер не вызывает события
От: algol Россия about:blank
Дата: 06.07.09 17:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Определил, то же самое


Тогда можно попробовать подписаться через IConnectionPointContainer (.FindConnectionPoint(), .Advise()). Пример можно найти здесь
Автор(ы): Гасанов Ровшан Закариевич
Дата: 17.11.2005
Статья рассказывает о динамическом взаимодействии с Excel посредством OLE Automation и рефлексии.
Требуется знание С#.
.
Re: COM сервер не вызывает события
От: Аноним  
Дата: 07.07.09 08:25
Оценка:
Здравствуйте, Titov Andrew, Вы писали:

Вы не могли бы показать библиотеку типов сервера в IDL, её можно получить с помощью OleWiev.exe, например. Также на всякий случай уточните, сервер локальный, то есть в виде EXE?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.