Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > c# vs vb.net |
Автор: infarch 21.11.2011, 13:04 | ||||
Возникла у меня необходимость написать приложение на c#. Простая форма, а на ней - ActiveX контрол. Если кто знает - AutoVue от Оракла. Документации практически нет, только скудный пример на бейсике. Ну хорошо, форму создал, контрол работает. Теперь надо слушать его события. Вот кусок из того примера на бейсике.
Главное что меня интересует: EventID = e.arg0.getEventID(). Надо получит айди события. Начал писать на c#:
И вот тут облом ( arg0 имеет тип Object и никакого getEventID там нет. Через e.arg0.GetType() уточнил что тип его на самом деле System.__ComObject. И что это за тип? Студия притворяется что не знает такого. А бейсик работает себе, гад такой. Ну не верю я что он круче! Да и не подходит мне он, на си написать надо. Может кто подскажет как выкрутиться из ситуации? |
Автор: diadiavova 21.11.2011, 20:41 | ||
Круче, круче - не сомневайся ![]() На самом деле, если ты пишешь на последней(в данный момент 4-ой) версии шарпа, то можно использовать что-то вроде
|
Автор: Fortnox 21.11.2011, 22:56 |
Мм, помню был похожий случай, когда я делал экспорт в Word одной фигни. Помогло приведение типов. Может в вашем случае, достаточно привести е к типу AxJVueAXLib.IID_ISource_onFileEventEvent (или посмотреть, как тип во время отладки). |
Автор: Voyager 22.11.2011, 08:53 |
Ну и что, _ComObject можно приводить к соответствующим интерфейсам. |
Автор: infarch 22.11.2011, 11:12 | ||
Конечно можно приводить... Вот только надо знать к каким. Я бы давно уже попробовал. Итак, эксперимент не удался:
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: |
Автор: diadiavova 22.11.2011, 23:36 | ||
Ну это означает только то, что данный объект не содержит такого метода. Ты уверен, что приведенный тобой код на бейсике работает? Я ведь только показал как можно на шарпе написать то, что ты привел, а с этим компонентом я не знаком. |
Автор: infarch 23.11.2011, 10:33 |
В том то и дело что работает :( Я получаю все айди, без проблем. |
Автор: diadiavova 23.11.2011, 11:18 | ||||
Ну попробуй через рефлексию, но это гемор.
|