Предлагаемая компонента выполнена по технологии Native API и дает возможность использовать компоненты, созданные на платформе .NET, без установки и без регистрации в реестре windows. Для подключения .NET сборок используется "CLR Hosting API". При загрузке .NET сборки, компонента начинает обладать свойствами и методами созданного класса.
Ограничения компоненты:
Статические классы не поддерживаются;
Конструктор должен быть без параметров;
Поддерживаются только следующие типы для обмена с 1С: System.String; System.Boolean; System.Int32; System.Double; System.Byte[];
Out и ref параметры не поддерживаются в связи с тем, что не получилось это реализовать, см. описание метода, если кто разберется, как это сделать, буду очень рад.
Свойства и метода компоненты:
свойства:
- CurrentVersionCLR - только для чтения, доступно только после успешного выполнения метода CreateObject(), возвращает используемую версию CLR;
методы:
- GetLastError() - возвращает строку, содержащую последнюю ошибку;
- GetInstalledRuntimes() - возвращает строку, содержащую перечисленные через ";" установленные версии CLR;
- CreateObject(Dir, AssemblyName, ClassName, VersionCLR, RemoveDir) - создает объект из сборки, находящейся в определенном каталоге;
- Dir - каталог, в котором находятся компоненты, фактически аналог каталога приложения, нужен чтобы могли загрузиться зависимые сборки;
- AssemblyName - имя сборки без расширения;
- ClassName - полное имя класса;
- VersionCLR - необязательный параметр, если не указана, то будет использована последняя версия, формат строки можно посмотреть в свойстве CurrentVersionCLR;
- RemoveDir - необязательный параметр, по умолчанию Ложь, если Истина, то при уничтожении компоненты будет удален каталог Dir.
- CreateObjectFromFile(FileName, ClassName, VersionCLR) - создает объект из сборки, находящейся в определенном файле;
- FileName - полное имя файла;
- ClassName - полное имя класса;
- VersionCLR - необязательный параметр, если не указана, то будет использована последняя версия, формат строки можно посмотреть в свойстве CurrentVersionCLR;
- CreateObjectFromBase64(FileData, ClassName, VersionCLR) - создает объект из сборки, файл которой закодирован в строку Base64.
- FileData - строка, двоичные данные сборки, закодированные в Base64;
- ClassName - полное имя класса;
- VersionCLR - необязательный параметр, если не указана, то будет использована последняя версия, формат строки можно посмотреть в свойстве CurrentVersionCLR;
Пример кода:
Если Не ПодключитьВнешнююКомпоненту(ИмяМакетаКомпоненты, "NET") Тогда
Сообщить("Не удалось подключить компоненту NETLoader");
Возврат Неопределено;
Иначе
Сообщить("Компонента NETLoader успешно подключена");
КонецЕсли;
Компонента = Новый("AddIn.NET.NETLoader");
Попытка
// Параметры: FileData, ClassName, VersionCLR
Компонента.CreateObjectFromBase64(Base64Строка(Test_dll), "Test.Class1");
Исключение
Сообщить("Ошибка при вызове метода ""CreateObject"": " + ОписаниеОшибкиКомпоненты(Компонента));
Компонента = Неопределено;
КонецПопытки;
CurrentVersionCLR = Компонента.CurrentVersionCLR;
Сообщить("CurrentVersionCLR: """ + CurrentVersionCLR + """");
InstalledRuntimes = Компонента.GetInstalledRuntimes();
Сообщить("Installed runtimes: " + InstalledRuntimes);
Результат = Компонента.TestMethod("СтрокаИз1С");
Сообщить(Результат);
Компонента.TestProp = "TestPropFrom1C";
Сообщить(Компонента.TestProp);
Компонента.TestField = "TestFieldFrom1C";
Сообщить(Компонента.TestField);
Описание файлов:
NETLoader.zip - архив, содержащий каталоги:
- NETLoader - проект для Visual Studio Express 2013 for Windows Desktop и демо обработку (1 версия от 02.09.2014).
- NETLoader2 - проект для Visual Studio 2015 Community Edition, использованы заголовочные файлы для версии 1С 8.3.8 (2 версия от 14.08.2016).
Отказ от ответственности:
Данный продукт Вы используете на свой страх и риск, претензии ни в каком виде не принимаются.
Update 14.08.2016: проект скомпилирован Visual Studio 2015 Community Edition, использованы заголовочные файлы от 8.3.8, исправлены ошибки и недочеты, добавлены методы CreateObjectFromFile и CreateObjectFromBase64.
Update 13.12.2022: Компонента морально устарела, т.к. давно уже появился .net core, который теперь просто .net, и вообще на серверах уже linux.
Я даже не знаю, работает ли она до сих пор. Поэтому, у меня нет никакого желания получать за нее стартмани, но бесплатной у меня не получилось её сделать.
Если вам нужна какая-то функциональность, которой нет в 1С, то для начала, самый простой способ получить её - это реализовать http-сервис, который можно использовать из 1С.
Ну и если вы уверены, что вам нужна именно нативная внешняя компонента, и не хочется писать её на C++, то попробуйте Rust, тут можно посмотреть пример https://github.com/medigor/example-native-api-rs.