|
Помогите с внешней компонентой С# | ☑ | ||
---|---|---|---|---|
0
yolops
26.01.14
✎
00:02
|
Здравствуйте. Нашел шаблон внешней компоненты и хотел разобраться с ним. Все функции работают нормально, но не могу добавить генерацию внешнего события. Выдает ошибку. В чем дело?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Runtime; namespace CL2 { public interface ASignatures { int s(); string FName(); void TestExtEvent([MarshalAs(UnmanagedType.BStr)] String msg); } internal static class ExternalAddIn { internal static Object App; //Объект внешней компоненты internal static IAsyncEvent ExtEvent; //Внешнее событие } [Guid("AB634001-F13D-11d0-A459-004095E1DAEA")]// стандартный GUID для IInitDone ссылка http://soaron.fromru.com/vkhints.htm [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IInitDone { /// <summary> /// Инициализация компонента /// </summary> /// <param name="connection">reference to IDispatch</param> void Init( [MarshalAs(UnmanagedType.IDispatch)] object connection); /// <summary> /// Вызывается перед уничтожением компонента /// </summary> void Done(); /// <summary> /// Возвращается инициализационная информация /// </summary> /// <param name="info">Component information</param> void GetInfo( [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] info); } public interface IAsyncEvent { void SetEventBufferDepth(Int32 depth); void GetEventBufferDepth(ref Int32 depth); void ExternalEvent([MarshalAs(UnmanagedType.BStr)] String source, [MarshalAs(UnmanagedType.BStr)] String message, [MarshalAs(UnmanagedType.BStr)] String data); void CleanBuffer(); } [ClassInterface(ClassInterfaceType.AutoDual)] public class ArsClass : ASignatures, IInitDone { private IAsyncEvent asyncEvent = null; //private IStatusLine statusLine = null; /// <summary> /// Инициализация компонента /// </summary> /// <param name="connection">reference to IDispatch</param> public void Init( [MarshalAs(UnmanagedType.IDispatch)] object connection) { try { ExternalAddIn.App = connection; asyncEvent = (IAsyncEvent)connection; } catch { throw new COMException(@"Unknown object context"); } } /// <summary> /// Возвращается информация о компоненте /// </summary> /// <param name="info">Component information</param> public void GetInfo( [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] info) { info[0] = 2000; } public void Done() { ExternalAddIn.App = null; ExternalAddIn.ExtEvent = null; } public string FName() { return "Arsen"; } public int s() { int a = 1; int b = 2; int c = a + b; return c; } public void TestExtEvent([MarshalAs(UnmanagedType.BStr)] String msg) //Метод компоненты, вызываемый в 1С { try { ExternalAddIn.ExtEvent.ExternalEvent(@"DotNetAddInSample", @"TestExtEvent", @"Test message for, " + msg + @" !");//Генерация внешнего события } catch { throw new COMException(@"Failed to execute TestExtEvent() method"); } } } } |
|||
1
yolops
26.01.14
✎
00:13
|
как можно запустить отладку этой компоненты в vs?
|
|||
2
Принт
26.01.14
✎
00:14
|
так же как отладку dll
|
|||
3
yolops
26.01.14
✎
01:07
|
у меня почему то не срабатывает метод init
|
|||
4
Serginio1
26.01.14
✎
11:32
|
Я использую
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext()); Sc = SynchronizationContext.Current; и Sc.Send(d => Событие(), null); v8: v8: Использование сборок .NET в 1С 7.x и 8.x |
|||
5
Serginio1
26.01.14
✎
11:34
|
Посмотри еще здесь
v8: Внешняя компонента для 1с 8.2 на C# |
|||
6
yolops
26.01.14
✎
16:32
|
может есть рабочий пример? Можете скинуть? [email protected]
|
|||
7
Serginio1
26.01.14
✎
17:05
|
(6) Если почитаешь 5 то найдешь ссылки
http://www.rsdn.ru/forum/dotnet/3471534.1 http://www.rsdn.ru/article/dotnet/cs1c.xml |
|||
8
Serginio1
26.01.14
✎
17:23
|
Кроме того 8 ка поддерживает события
v8: v8: Использование сборок .NET в 1С 7.x и 8.x v8: v8: Использование сборок .NET в 1С 7.x и 8.x Исходники и примеры можешь скачать отсюда http://1c.proclub.ru/modules/mydownloads/personal.php?cid=142&lid=9569 |
|||
9
yolops
26.01.14
✎
19:47
|
Serginio1 спасибо! реально помог!
|
|||
10
yolops
27.01.14
✎
13:41
|
Еще проблема. Компоненту написал, все работает. Скопировал dll и tbl и pdb файлы на другой комп, зарегистрировал, все ок, но 1с не хочет коннектится к компоненте. ПодключитьВнешнююКомпоненту возвращает 0
|
|||
11
yolops
27.01.14
✎
13:47
|
регистрирую так:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm.exe "C:\Debug\myTestLib.dll" /tlb Запись в регистре есть |
|||
12
yolops
27.01.14
✎
13:53
|
Все разобрался, зарегистрировал так:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm.exe "C:\Debug\myTestLib.dll" /codebase C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ngen.exe "C:\Debug\myTestLib.dll" |
|||
13
Serginio1
27.01.14
✎
15:07
|
(12) в 8 есть специальная регистрилка для Net
РегистрацияКомСервера.exe |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |