v7: Подключить dll написанную на c# к 1с 7.7 #784690


#0 by самолет
Есть написанная dll на С#. Хочу ее подключить к 1с 7.7. Нужна для XSLT трансформаций. Пока пытаюсь вызвать метод Start чтобы увидеть что она работает. Но не получается. Может кто подскажет в чем моя ошибка.... 0) Создал на шарпе dll Вот ее код на С# {     public class Transform     {         public void start         {             Console.WriteLine("Тестирование прошло успешно");         }                          public void test                      public string DoTransform(XmlDocument fileXML , string fXSLT)         {               XslCompiledTransform xslt = new XslCompiledTransform;     } } 1)Библиотеку при сборке на закладке "Подписывание" поставил галочку "Подписать сборку" и создал файл с ключем без пароля. 2)После зарегистрировал через C:WindowsMicrosoft.NETFrameworkv4.0.30319 egasm.exe /codebase "C:UsersadminDocumentsVisual Studio 2015ProjectsClassLibrary1ClassLibrary1inx86DebugMyDll.dll" регистрация прошла успешно. 3) Проверил как она подключается из консольного приложения С#. Тоже работает 4) Стал в 1с 7.7 подключать ругается на     try         ЗагрузитьВнешнююКомпоненту("C:UserskarlukDocumentsVisual Studio 2015ProjectsClassLibrary1ClassLibrary1inx86DebugMyDll.dll");     except         message("На загружена внешняя компонента");          Ошибка при создании объекта из компоненты C:UsersadminDocumentsVisual Studio 2015ProjectsClassLibrary1ClassLibrary1inx86DebugMyDll.dll (отсутствует CLSID) ОБОЙТИ НЕ ПОНЯЛ КАК.... 5)Взял в реесте нашел по имени MyDll CLSID Попробывал сделать         Сообщить("компонента vkloader.dll не загружена","!!!");     Иначе
#1 by Serginio1
Там есть и примеры для 7.7
#2 by Serginio1
Или переделай свою библиотеку под СОМ
#3 by Ёпрст
#4 by Serginio1
Там и писать то ничего не надо. Используй напрямую XmlDocument , XslCompiledTransform и StringWriter
#5 by самолет
NetObjectToIDispatch45 это библиотека сторонняя? ее нужно подключить? вот так выдает ошибку не могу создать ("NetObjectToIDispatch45");
#6 by Serginio1
Я же тебе ссылочку дал. Там ссылки на статьи, исходники и DLL
#7 by самолет
сп. счас попробую разобраться...
#8 by Serginio1
Start то куда Console будет выводить,
#9 by самолет
да консоль
#10 by самолет
это метод для теста чтобы увидеть что подключилась длл
#11 by Serginio1
Почитай У тебя всго 3 типа XmlDocument , XslCompiledTransform и StringWriter . Можешь веськод написать в 1С без этой DLL
#12 by dmitryds
галка com-объект в настройках. потом регистрация потом подключать по имени объекта через СоздатьОбъект (никаких путей)
#13 by dmitryds
+ и никаких вклоадеров
#14 by dmitryds
#15 by самолет
регистрация regasm или regsvr32?
#16 by самолет
если не получится то так и сделаю
#17 by dmitryds
regasm
#18 by dmitryds
библиотека для 1С77 делается просто... Создаем сборку, добавляем публичный объект (например мойОбъект), ставим флаг COM, добавляем публичные методы в объект. в 77 создаем объекты через мойОбъект = СоздатьОбъект("мойОбъект"); и пользуемся его публичными методами. И никакого дополнительного левого софта не нужно
#19 by самолет
"МойОбъект" это только  имя класса в шарпе Например:   Addin.Tranform? или нужно еще namespace добавлять Addin.MyDll.Tranform? Mydll это namespace Tranform это класс
#20 by самолет
И галочка COM ставится на закладке "Сборка-Регистрация для COM взаимодействия"? Эта галочка?
#21 by Serginio1
Ты 2 то читал? Для каждого класса нужно прописать [ComVisible(true)] [ProgId("Project1.Class1")] [ClassInterface(ClassInterfaceType.AutoDual)] [Guid("Твой-GUID-4276-928A-8B91C9891FF1")]
#22 by Serginio1
ProgId это мойОбъект Guid формируй в сервисе
#23 by самолет
сделал под COM. т.е добавил классу [ComVisible(true)] [ProgId("Project1.Class1")] [ClassInterface(ClassInterfaceType.AutoDual)] [Guid("Твой-GUID-4276-928A-8B91C9891FF1")] сейчас ругается Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует интерфейс IInitDone) Посмотрел примеры там целые интерфейс IInitDone реализуют. Это что обязательно? Без этого не будет работать?
#24 by Serginio1
Зачем тебе ВК? СоздатьОбъект("Project1.Class1"); Кстати по ссылке из 1 есть ссылка на ФайлыNetObjectToIDispatch Где лежат примеры, DLL и там есть РегистрацияКомСервера.exe для интерактивной регистрации COM DLL
#25 by самолет
Просто до конца не могу помять создания COM dll. По описанию вроде как отличается только директивами перед классом и интерфейсом и галочками в настройках. Но вчера ночью качал примеры с сайта по ссылке которую ты давал и они тоже при сборке регистрируются но при подключении к 1с валятся с ошибкой что "неизвестная компонент". Сейчас уже хочется довести до конца и понять как можно делать СОМ dll для 1с...
#26 by Serginio1
Вот пошаговое создание СОМ библиотеки Но вообще проще использовать Там вообще можно не писать DLL. А для семерки проще использовать одну NetObjetToIDispatch45.dll зарегистрировать её, а все остальные библиотеки подгружать через неё. Смысл в ней в том, что она любой объект оборачивает в COM объект. Потрать немного время на Если, что непонятно подскажу
#27 by Serginio1
И почитай внутри папки есть NetObjectToIDispatch.docx Зарегистрировать можешь через  RegAsm.bat запустив от администратора в папке DLLNetObjetToIDispatch45 рядом с NetObjetToIDispatch45.dll
#28 by Кирпич
найди в интернете какой нибудь ликбез про COM. иначе ты так будешь методом тыка месяц делать то, что обычные люди делают за пять минут.
#29 by самолет
это я посмотрю спасибо.
#30 by самолет
Добавил в Шарпе все дерективы смотрел примеры Код с#:    [ClassInterface(ClassInterfaceType.AutoDual),ProgId("Addin.Tranform"),Guid("F62AA00E-235B-488C-BD81-D7A8470B3EDF"),ComVisible(true)]    public class Transform : iTransform {      public void start {        Console.WriteLine("Тестирование прошло успешно");      }    } } Код 1с:        Сообщить("Не удалось подключить компоненту "+ИмяВК); Библиотеку регистрировал через РегистрацияКомСервера.exe и через regasm все регистрируется но Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует интерфейс IInitDone) Не удалось подключить компоненту Addin.Tranform Вопрос: вот это интерфейс IInitDone он обязательно должен присудствовать в dll или он не нужен? Нигде кроме примера не нашел об этом информацию...
#31 by Кирпич
Если ты пишешь просто COM dll, то не надо реализовывать интерфейсы ВК (IInitDone и прочие). Загружать такую dll нужно через СоздатьОбъект(ИмяВК) и обязательно регистрировать в реестре. Если ты делаешь полноценную ВК, то обязательно в ней должен быть IInitDone.
#32 by Кирпич
и ЗагрузитьВнешнююКомпоненту(ИмяВК);
#33 by Кирпич
и прочитай наконец доку от 1С. не позорь светлое звание одинесника.
#34 by самолет
Вот Это из ссылки выше Замечу, что метод ЗагрузитьВнешнююКомпоненту в данной ситуации (COM-объекты на .NET) не работает, и необходимо использовать метод ПодключитьВнешнююКомпоненту.
#35 by самолет
поэтому не понятно причем здесь ЗагрузитьВнешнююКомпоненту(ИмяВК);
#36 by самолет
и в реестре уже 10 раз зарегистрировал и проверил
#37 by Кирпич
ты интерфейс IInitDone в своей ВК реализовал?
#38 by Кирпич
ну не работает так не работает. это же .NET, тут всё через задницу немножко.
#39 by Serginio1
Ты вообще читаешь, что тебе пишут? Смотри 24
#40 by Serginio1
Если тебе нужна ВК то смотри опять же как реализовано Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF
#41 by самолет
IInitDone сейчас не реализован код же я показал на шарпе. Т.е. сейчас весь механизм IInitDone из примера буду переносить в свою библиотеку.
#42 by Кирпич
ну вот и переноси. про остальные механизмы тоже не забудь :)
#43 by Serginio1
А зачем тебе ВК?
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям