Top.Mail.Ru

C# + 1C. Пишем простейший COM-сервер для 1С

Изучение возможности интеграции C# и 1С мы начнем с создания на C# простейшего COM сервера. Для этой цели нам понабиться Visual Studio 2010 и платформа 1C 8.2. И так, в визуал студии создаем новый проект, тип проекта выбираем «библиотека классов» (class library):

У нас появится заготовка библиотеки, куда мы введем вот такой текст (вместо существующего):

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

using System.Windows.Forms;



namespace MyComFor1C

{

    [Guid("2A44957D-A704-4370-9C4B-5D6EE147ABB6")]

    internal interface IMyClass

    {

        [DispId(1)]

        void message(string msg);

    }



    [Guid("CC441039-F00D-4617-B2AD-36082B7D4D9D"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    public interface IMyEvents

    {

    }



     [Guid("E60248B4-F573-4EAE-93E9-5E77341D05BA"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]

    public class MyClass : IMyClass

    {

         public void message(string msg)

         {

             MessageBox.Show(msg,"Это сообщение COM",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);

         }

    }

}

Обратите внимание, что в юзинги мы добавили System.Windows.Forms, поэтому необходимо подключить к библиотеке соответствующую ссылку:

Сделать это можно либо кликнув на ветке «Ссылки» правой кнопочкой мыши:

либо через меню «Проект» —> «Добавить ссылку»:

Теперь обратите внимание на гуиды (текст типа CC441039-F00D-4617-B2AD-36082B7D4D9D). Их надо будет сгенерить. Для этого запускаем специальную утилиту «Генератор GUID», которая входит в стандартный пакет Visual Studio:

Для генерации выбираем формат, в котором надо генерить, нажимаем «Создать GUID» а потом «Копировать», что бы поместить его в буфер обмена, а потом вставить в текст программы:

Вставив в программу приведенный здесь код, а в код свои гуиды, займемся настройкой проекта:

Во-первых, на закладке «Построение» надо указать, что наша программа будет зарегистрирована для COM-взаимодействия:

Во-вторых, надо создать подпись на сборку (пароль создавать необязательно):

Ну, и последний штрих, идем в AssemblyInfo.cs и вставляем туда вызов AssemblyKeyFile, а ComVisible делаем true:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// Управление общими сведениями о сборке осуществляется с помощью
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("ClassLibrary1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ClassLibrary1")]
[assembly: AssemblyCopyright("Copyright ©  2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
// для COM-компонентов.  Если требуется обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(true)]
[assembly: AssemblyKeyFile("MyComFor1C.snk")]
 
...
...

Все, компилим проект а затем регистрируем его утилитой RegAsm:

Можно нашу компоненту не регить предварительно, а хранить в виде двоичных данных и регать перед первым использованием.

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

Процедура КнопкаВыполнитьНажатие(Кнопка)
    МойОбъект = Новый COMОбъект("MyComFor1C.MyClass");
    МойОбъект.message("Проба. Это такое пробное сообщение");
КонецПроцедуры

Запустив эту обработку, мы увидим, что наш COM-объект действительно работает

 

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar