Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> c# vs vb.net 
:(
    Опции темы
infarch
Дата 21.11.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возникла у меня необходимость написать приложение на c#. Простая форма, а на ней - ActiveX контрол. Если кто знает - AutoVue от Оракла. Документации практически нет, только скудный пример на бейсике. Ну хорошо, форму создал, контрол работает. Теперь надо слушать его события. Вот кусок из того примера на бейсике.

Код

    Private Sub AxJVueAXControl1_onFileEvent(ByVal sender As System.Object, ByVal e As AxJVueAXLib.IID_ISource_onFileEventEvent) Handles AxJVueAXControl1.onFileEvent
        Dim EventID As Integer
        EventID = e.arg0.getEventID()
        If EventID = EVENTID_FILEEVENT_ONSETFILE Then
            UpdateMessage()
        ElseIf EventID = EVENTID_FILEEVENT_ONSETPAGE Then
            UpdateMessage()
        End If
    End Sub


Главное что меня интересует: EventID = e.arg0.getEventID(). Надо получит айди события. Начал писать на c#:

Код

       void av_onFileEvent(object sender, AxJVueAXLib.IID_ISource_onFileEventEvent e)
        {
            e.arg0...
        }


И вот тут облом ( arg0 имеет тип Object и никакого getEventID там нет. Через e.arg0.GetType() уточнил что тип его на самом деле System.__ComObject. И что это за тип? Студия притворяется что не знает такого. А бейсик работает себе, гад такой. Ну не верю я что он круче! Да и не подходит мне он, на си написать надо. Может кто подскажет как выкрутиться из ситуации?



PM MAIL   Вверх
diadiavova
Дата 21.11.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(infarch @  21.11.2011,  14:04 Найти цитируемый пост)
Ну не верю я что он круче!

Круче, круче - не сомневайся smile

Цитата(infarch @  21.11.2011,  14:04 Найти цитируемый пост)
Может кто подскажет как выкрутиться из ситуации?

На самом деле, если ты пишешь на последней(в данный момент 4-ой) версии шарпа, то можно использовать что-то вроде
Код

dynamic arg0 = e.arg0
EventID = arg0.getEventID()
В противном случае придется иметь дело с рефлексией и тянуть все оттуда.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Fortnox
Дата 21.11.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

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



Мм, помню был похожий случай, когда я делал экспорт в Word одной фигни. Помогло приведение типов.
Может в вашем случае, достаточно привести е к типу AxJVueAXLib.IID_ISource_onFileEventEvent (или посмотреть, как тип во время отладки).
PM MAIL   Вверх
diadiavova
Дата 22.11.2011, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Fortnox @  21.11.2011,  23:56 Найти цитируемый пост)
Может в вашем случае, достаточно привести е к типу AxJVueAXLib.IID_ISource_onFileEventEvent (или посмотреть, как тип во время отладки). 

Ну он же написал, что тип - _ComObject


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Voyager
Дата 22.11.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну и что, _ComObject можно приводить к соответствующим интерфейсам.
PM   Вверх
infarch
Дата 22.11.2011, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Конечно можно приводить... Вот только надо знать к каким. Я бы давно уже попробовал. Итак, эксперимент не удался:

Код


            dynamic arg = e.arg0;
            int EventID = arg.getEventID();



System.NotImplementedException was unhandled by user code
  Message=The method or operation is not implemented.
  Source=mscorlib
  StackTrace:
       at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
       at System.Dynamic.ComRuntimeHelpers.GetITypeInfoFromIDispatch(IDispatch dispatch, Boolean throwIfMissingExpectedTypeInfo)
       at System.Dynamic.IDispatchComObject.EnsureScanDefinedMethods()
       at System.Dynamic.IDispatchComObject.System.Dynamic.IDynamicMetaObjectProvider.GetMetaObject(Expression parameter)
       at System.Dynamic.DynamicMetaObject.Create(Object value, Expression expression)
       at System.Dynamic.DynamicMetaObjectBinder.Bind(Object[] args, ReadOnlyCollection`1 parameters, LabelTarget returnLabel)
       at System.Runtime.CompilerServices.CallSiteBinder.BindCore[T](CallSite`1 site, Object[] args)
       at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
       at CallSite.Target(Closure , CallSite , Object )
       at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
       at AutoVue.Form1.av_onFileEvent(Object sender, IID_ISource_onFileEventEvent e) in C:\Users\sku\Documents\Visual Studio 2010\Projects\AutoVue\AutoVue\Form1.cs:line 49
       at AxJVueAXLib.AxJVueAXControl.RaiseOnonFileEvent(Object sender, IID_ISource_onFileEventEvent e)
       at AxJVueAXLib.AxJVueAXControlEventMulticaster.onFileEvent(Object arg0)
  InnerException: 

PM MAIL   Вверх
diadiavova
Дата 22.11.2011, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(infarch @  22.11.2011,  12:12 Найти цитируемый пост)
System.NotImplementedException was unhandled by user code
  Message=The method or operation is not implemented.

Ну это означает только то, что данный объект не содержит такого метода. Ты уверен, что приведенный тобой код на бейсике работает? Я ведь только показал как можно на шарпе написать то, что ты привел, а с этим компонентом я не знаком.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
infarch
Дата 23.11.2011, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В том то и дело что работает :( Я получаю все айди, без проблем.
PM MAIL   Вверх
diadiavova
Дата 23.11.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(infarch @  23.11.2011,  11:33 Найти цитируемый пост)
В том то и дело что работает :( Я получаю все айди, без проблем. 

Ну попробуй через рефлексию, но это гемор. 
Код

var arg = e.arg0;
 int EventID = arg.GetType().GetMethod("getEventID", System.Reflection.BindingFlags.IgnoreCase).Invoke(arg, null);



Это сообщение отредактировал(а) diadiavova - 25.11.2011, 03:31


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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