В общем разобрался . Вот пример компоненты на C# для 1С 7.7 с получением и использованием 1С-оского класса:
Код | using System; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms;
namespace AddIn { [Guid(@"AB634001-F13D-11D0-A459-004095E1DAEA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IInitDone { void Init([MarshalAs(UnmanagedType.IDispatch)] Object pConnection); void Done(); void GetInfo([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Object[] pInfo); }
[Guid("AB634004-F13D-11D0-A459-004095E1DAEA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 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(); }
[ComVisible(true), ProgId(@"AddIn.ExcelReader"), Guid(@"9F0CF3B4-B799-4852-8293-9BB9500A3099"), ClassInterface(ClassInterfaceType.AutoDispatch)] public class ExcelReader : IInitDone { public static Object pCon = new object();
public ExcelReader(){} public void Init([MarshalAs(UnmanagedType.IDispatch)] Object pConnection) { try { pCon = pConnection; } catch { throw new COMException(@"Unknown object context "); } }
public void Done() { }
public void Test() { object obj1C = pCon.GetType().InvokeMember("AppDispatch", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, pCon, null); Object[] Args = new Object[1]; Args[0] = "ТаблицаЗначений"; object Object1C = obj1C.GetType().InvokeMember("CreateObject", BindingFlags.GetProperty, null, obj1C, Args);
Args[0] = "Должность"; Object1C.GetType().InvokeMember("НоваяКолонка", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, Args);
Args[0] = "Зарплата"; Object1C.GetType().InvokeMember("НоваяКолонка", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, Args);
Object1C.GetType().InvokeMember("НоваяСтрока", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, null);
Object1C.GetType().InvokeMember("УстановитьЗначение", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, new object[] { 1, "Должность", "Программер" });
Object1C.GetType().InvokeMember("ВыбратьСтроку", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, null);
Marshal.Release(Marshal.GetIDispatchForObject(Object1C)); Marshal.ReleaseComObject(Object1C); }
public void GetInfo([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Object[] pInfo) { pInfo[0] = @""; } } }
|
|