компонента для 1С
От: Аноним  
Дата: 25.02.05 07:42
Оценка:
День добрый.

Если кто нибудь создавал компоненту для 1С на C#, помогите разобраться плиз.

исходя из статьи http://www.rsdn.ru/article/dotnet/cs1c.xml, пробую компилировать библиотеку, не получаеться...

автор исходники не выложил, а у самого мозгов не хватает

Спасибо.
Re: компонента для 1С
От: Vladislav_007 Россия www.bsystems.org
Дата: 25.02.05 08:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>День добрый.


А>Если кто нибудь создавал компоненту для 1С на C#, помогите разобраться плиз.


А>исходя из статьи http://www.rsdn.ru/article/dotnet/cs1c.xml, пробую компилировать библиотеку, не получаеться...


А>автор исходники не выложил, а у самого мозгов не хватает


А>Спасибо.



И мне тоже надо !!! ПОМОГИТЕ НАМ !!!
С уважением шарпаламер.
Re[2]: компонента для 1С
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.02.05 11:12
Оценка:
Здравствуйте, Vladislav_007, Вы писали:

V Не смотрел внмательно, но по сути статья и есть исходники


public class Component : ServicedComponent,
IInitDone,
ILanguageExtender
{
}

все есть. Нужно только раставить переменные класса. И отнаследоваться
от Component. Да и такие языковые конструкции как
if (false == found) заменить на if (! found) шутка.
Желаю удачи.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[3]: компонента для 1С
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.02.05 11:22
Оценка:
Здравствуйте, Serginio1, Вы писали:

ublic void RegisterExtensionAs(
  [MarshalAs(UnmanagedType.BStr)]
  ref String extensionName)
{
  try 
  {
    // initialize data members
    nameToNumber      = new Hashtable();
    numberToName      = new Hashtable();
    numberToParams    = new Hashtable();
    numberToRetVal    = new Hashtable();

    propertyNameToNumber  = new Hashtable();
    propertyNumberToName  = new Hashtable();

    numberToMethodInfoIdx  = new Hashtable();
    propertyNumberToPropertyInfoIdx  = new Hashtable();

    // Заполнение хэш-таблиц
    Type type = this.GetType();
    Type[] allInterfaceTypes = type.GetInterfaces();

    // Определение идентификатора
    int Identifier = 0;

    foreach(Type interfaceType in allInterfaceTypes)
    {
      if (
        !interfaceType.Name.Equals("IDisposable") 
        && !interfaceType.Name.Equals("IManagedObject")
        && !interfaceType.Name.Equals("IRemoteDispatch")
        && !interfaceType.Name.Equals("IServicedComponentInfo")
        && !interfaceType.Name.Equals("IInitDone")
        && !interfaceType.Name.Equals("ILanguageExtender")
        )
      {
        // Обработка методов
        MethodInfo[] interfaceMethods = interfaceType.GetMethods();
        foreach (MethodInfo interfaceMethodInfo in interfaceMethods)
        {
          nameToNumber.Add(interfaceMethodInfo.Name, Identifier);
          numberToParams.Add(Identifier,
            interfaceMethodInfo.GetParameters().Length);
          if (typeof(void) != interfaceMethodInfo.ReturnType)
            numberToRetVal.Add(Identifier, true);

            Identifier++;
          }

        // Обработка свойств
        PropertyInfo[] interfaceProperties = interfaceType.GetProperties();
        foreach (PropertyInfo interfacePropertyInfo in interfaceProperties)
        {
          propertyNameToNumber.Add(interfacePropertyInfo.Name, Identifier);

          Identifier++;
        }
      }
    }

    foreach (DictionaryEntry entry in nameToNumber)
      numberToName.Add(entry.Value, entry.Key);
    foreach (DictionaryEntry entry in propertyNameToNumber)
      propertyNumberToName.Add(entry.Value, entry.Key);

    // Сохранение информации о методах класса 
    allMethodInfo = type.GetMethods();

    // Сохранение информации о свойствах класса
    allPropertyInfo = type.GetProperties();

    // Отображение номера метода на индекс в массиве
    foreach (DictionaryEntry entry in numberToName)
    {
      bool found = false;
      for(int ii = 0; ii < allMethodInfo.Length; ii++)
      {
        if (allMethodInfo[ii].Name.Equals(entry.Value.ToString()))
        {
          numberToMethodInfoIdx.Add(entry.Key, ii);
          found = true;
        }
      }
      if (false == found)
        throw new COMException("Метод не реализован ");
    }

    // Отображение номера свойства на индекс в массиве
    foreach (DictionaryEntry entry in propertyNumberToName)
    {
      bool found = false;
      for(int ii = 0; ii < allPropertyInfo.Length; ii++)
      {
        if (allPropertyInfo[ii].Name.Equals(entry.Value.ToString()))
        {
          propertyNumberToPropertyInfoIdx.Add(entry.Key, ii);
          found = true;
        }
      }
      if (false == found)
        throw new COMException("The property is not implemented");
    }

    // Компонент инициализирован успешно
    // Возвращаем имя компонента
    extensionName  = componentName;
  }
  catch (Exception)
  {
    return;
  }
}



Основное обратить внимание на
Type type = this.GetType();
Type[] allInterfaceTypes = type.GetInterfaces();

То есть вы должны определить свои интерфейсы и определить методы в классе наследнике от Сомпонент.
Можно переопределить данный метот, путем внедрение своего класса без интефейсов, слегка переписав медод формирования Хэш таблицы методов и свойств.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[4]: компонента для 1С
От: Аноним  
Дата: 25.02.05 11:54
Оценка:
спасибо большое

abdula
Re[4]: компонента для 1С
От: abdula  
Дата: 02.03.05 06:32
Оценка:
Доброе время суток.

Помогите разобраться:

Компилирую такой кусок кода в dll, просто хоть подключить к 1С:

using System;
using System.EnterpriseServices;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

[assembly: AssemblyVersion("1.0.0.1")]
[assembly: ApplicationAccessControl(AccessChecksLevel=AccessChecksLevelOption.Application)]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: CLSCompliant(true)]
[assembly: Guid("2A583381-79E9-4842-9A68-5B2C8A113199")]
[ProgId("AddIn.Componenta")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Componenta : ServicedComponent, 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)
    {
        asyncEvent  = (IAsyncEvent)connection;
        statusLine  = (IStatusLine)connection;
    }

    /// <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(){}
}


1С возвращает мне:
Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует CLSD)

Спасибо
Re[5]: компонента для 1С
От: SEDEGOFF Россия www.srcsoft.com
Дата: 02.03.05 07:14
Оценка:
Попробуй добавить
[System.Runtime.InteropServices.Guid("2FB73E2F-0467-4820-9EF6-F030C4EDB876")]

Только GUID сгенери новый через Tools
... << RSDN@Home 1.1.3 stable >>
Re[6]: компонента для 1С
От: abdula  
Дата: 02.03.05 07:22
Оценка:
Здравствуйте, SEDEGOFF, Вы писали:

SED>Попробуй добавить

SED>
SED>[System.Runtime.InteropServices.Guid("2FB73E2F-0467-4820-9EF6-F030C4EDB876")]
SED>

SED>Только GUID сгенери новый через Tools

Спасибо, но если это правильно, то не помогло

[assembly: ApplicationAccessControl(AccessChecksLevel=AccessChecksLevelOption.Application)]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: CLSCompliant(true)]
[assembly: Guid("36DBEB0E-024B-4ae7-A265-E986FD0FD43B")]
[System.Runtime.InteropServices.Guid("55FC714B-7544-4662-99BF-957298711031")]
[ProgId("AddIn.Componenta")]
[ClassInterface(ClassInterfaceType.None)]
public class Componenta : ServicedComponent, IInitDone
{
...
}
Re[5]: компонента для 1С
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.03.05 11:24
Оценка:
Здравствуйте, abdula, Вы писали:

A>1С возвращает мне:

A>Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует CLSD)

Обычно это сообщение о том что не нашла IInitDone.
Надо еще в ресурсах прописать
http://soaron.fromru.com/vkhints.htm
например Component.RC и скомпилировать ее с проектом
STRINGTABLE DISCARDABLE
BEGIN

100 "Componenta"

END
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[6]: компонента для 1С
От: abdula  
Дата: 02.03.05 14:09
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Обычно это сообщение о том что не нашла IInitDone.

S> Надо еще в ресурсах прописать
S>http://soaron.fromru.com/vkhints.htm
S> например Component.RC и скомпилировать ее с проектом
S> STRINGTABLE DISCARDABLE
S>BEGIN

S> 100 "Componenta"


S>END


не хочет компилиться с этим ресурсом
пространство имен говорит не совпадает
Re[7]: компонента для 1С
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.03.05 14:45
Оценка:
Здравствуйте, abdula, Вы писали:


S>> например Component.RC и скомпилировать ее с проектом

S>> STRINGTABLE DISCARDABLE
S>>BEGIN

S>> 100 "Componenta"


S>>END


A>не хочет компилиться с этим ресурсом

A>пространство имен говорит не совпадает
http://gzip.rsdn.ru/article/dotnet/resources.xml
Автор(ы): Павел Румянцев, Владислав Чистяков
Дата: 17.01.2004
В статье рассматриваются способы создания управляемых (managed) ресурсов, описываются классы, обеспечивающие доступ к ресурсам, а также разбирается работа методов этих классов. Приводится информация о физической организации управляемых ресурсов.



Может Это поможет http://gzip.rsdn.ru/article/dotnet/winres.xml
Автор(ы): Алифанов Андрей
Дата: 25.02.2003
Данная статья описывает утилиту для записи Win32-ресурсов в файлы формата PE. Утилита в первую очередь предназначена для использования в проектах на Visual C# и VB.NET, хотя и не только :-)


создаешь вышеописанный файл. Компилишь ее например brcc32.exe до RES
Честно говоря не имел дела с ресурсами в Net
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re: компонента для 1С
От: sndanil Россия  
Дата: 03.03.05 08:50
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>День добрый.


А>Если кто нибудь создавал компоненту для 1С на C#, помогите разобраться плиз.


А>исходя из статьи http://www.rsdn.ru/article/dotnet/cs1c.xml, пробую компилировать библиотеку, не получаеться...


А>автор исходники не выложил, а у самого мозгов не хватает


А>Спасибо.


Если еще надо пиши на safonov(a)formula-it.ru пришлю работающую компоненту, написанную кажется на основании этой статьи.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.