Изучение возможности интеграции 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-объект действительно работает

Все комментарии
Чтобы оставить комментарий, необходимо войти или зарегистрироваться.
Пока нет комментариев. Будьте первым!