#0
by Ион
Подскажите пожалуйста , как использовать dll , сделанную на C# , в 1сv8 ? Что-то попробовал - не получилось.
#4
by Ион
(1-2) Сделал dll , зарегистрировал - все вроде как написано в (1-2). При вызове из 1с ошибка - "Тип не определен AddIn.МоеИмяКласса". Что возможно не так сделано ? (т.е хочу просто примитивно обратиться к свойству класса dll , получить строку "Привет от С#" , например). Спасибо большое за помощь
#6
by jbond
>Подскажите пожалуйста , как использовать dll , сделанную на C# , в 1сv8 ? как что? сделай класс COM published - тогда как ActiveX обьект можешь использовать
#11
by Ион
Вот как : (в GAC эта dll есть) Вот код: (LoadComponent срабатывает , а вот нажатие на кнопку выдает ошибку "Тип не определен AddIn.Privet") =============
#12
by Rie
ЗагрузитьВнешнююКомпоненту с именем .dll в качестве параметра - не пробовал? В ресурсах dll - ресурс 100 определил? Если да - то как именно?
#13
by Ион
Вот код C# на всякий случай - может что-то не так сделано. Спасибо заранее большое. public partial class PrivetClass : UserControl ,IInitDone { private string _privet; public string privet { } try { throw new COMException(@"Unknown object context"); } } public void GetInfo([MarshalAs(UnmanagedType.SafeArray, } } internal static class ExternalAddIn { public interface IAsyncEvent { void SetEventBufferDepth(Int32 depth); void GetEventBufferDepth(ref Int32 depth); void ExternalEvent([MarshalAs(UnmanagedType.BStr)] String source,
#15
by Ион
Извини пожалуйста , насчет ресурса не совсем понял, можно чуть поподробнее - что мне надо было сделать с ресурсами ?
#16
by jbond
- ага. а ВК написать легче, чем COM-обьект на .NET? 8-ка научилась непосредственно подлючать сборки .NET?
#20
by Ион
"имя объекта внешней компоненты" - это будет в моем случае имя класса "PrivetClass" или что ? И позволю себе вопрос : а для чего это надо? Вроде нигде в описаниях по созданию не встречался с этим... Нет , шаблон ни с ИТС ,а из примера в
#21
by Rie
Из "Технологии внешних компонент" (правда, у меня древнее издание, может, с тех пор чего поменялось): "Создание OLE-объекта внешней компоненты При загрузке внешней компоненты функцией ЗагрузитьВнешнююКомпоненту 1С:Предприятие определяет ProgID OLE-объекта компоненты следующим образом: ProgID имеет вид <Vendor>.<Component>; в качестве первой части (<Vendor>) используется строка "AddIn"; в качестве второй части (<Component>) используется строка с ID 100 из таблицы строк компоненты. Cтрока может иметь вид "Name1|Name2|...|NameN", и в этом случае будут созданы все объекты с ProgID вида "AddIn.NameX". Если такая строка отсутствует, то используется имя файла внешней компоненты без расширения. При использовании функции ПодключитьВнешнююКомпоненту ProgID OLE-объекта компоненты передается в качестве параметра функции и также может представляться строкой вида ProgID1| ProgID2|...|ProgIDX".
#22
by Ион
Или ProgID ? === вот что добавил сейчас в плане ресурсов: AddIn.Privet 100 PrivetClass 100 == сейчас переBuild сделаю и попробую
#24
by Ион
В VS2005 у меня в файле UserControl1.resx есть столбцы Name,Value,Comment. Делаю значит вот так:
#25
by Ион
сделал rebuild , скопировал dll в папку bin 1с , перерегистрировал - но выдает ту же ошибку "Тип не определен AddIn.Privet" ...
#27
by Ион
У меня есть подозрение , что не в этом дело. Сейчас нашел пример на C#, где вообще ProgID человек не задает. Использует имя класса далее и вроде все получается...
#29
by Ион
Попробовал я переименовать файл ресурсов (просто так опции переименовать нет - я переименовал файл ресурсов , удалил ссылку в проекте на старый файл и добавил ссылку на новый "OBJ_ID.resx" -но ошибка та же). Сейчас попробую переделать все так , как советуют по ссылке в
#30
by Rie
Подожди... Ты что переименовываешь? Существенно не имя файла ресурса, а идентификатор ресурса.
#33
by Ион
Попробовал переименовать Name "100" в "OBJ_ID" - все то же. Пишу в Visual Studio 2005 C#. Или я не понял вопрос ?
#34
by Rie
Такие варианты: В ресурсном файле где Strings Name: OBJ_ID Или откомпилируй компилятором ресурсов файл .rc, содержащий STRINGTABLE BEGIN 100 AddIn.Privet END и затащи результат в свой проект. Хотя вроде бы как у тебя всё в порядке должно быть...
#35
by Ион
(АЛЛ) То что я давал ссылку в - если сделать по предложенной схеме , то тоже выдает ошибку... Да.. Может быть знает кто-нибудь волшебную ссылочку , где лежит РАБОТАЮЩИЙ пример кода на C# ? (простое обращение к методу или свойству класса из 1с) Спасибо большое.
#39
by Rie
Выложи куда-нибудь свой проект целиком. Тогда можно будет глянуть, что у тебя не туда срастается.
#40
by Ион
Выложил солюшн , там доп. проект есть проверяющий dll в самом C# Буду очень благодарен за помощь
#47
by Rie
+ И где ты собираешься использовать эту dll? В v8 или в v7? И что, предположительно, она будет делать? (В v8 возможно использовать ActiveX. Если не требуется "обратное" обращение к 1С, то имеет ли смысл городить огород со внешними компонентами?)
#51
by Ион
В файле UserControl1.cs все реализации , тот код , что приведен в . Эту dll конкретно я нигде не собираюсь использовать - это тест , а так под V8. Хочется просто иметь шаблон работающего кода для C# , в котором просто есть обращение к свойству/полю/методу. Спасибо
#52
by Ион
Реализации у меня правильные ? (в файле UserControl1.cs , правой кнопкой по элементу, View code - и там все основное лежит)
#54
by Ион
(АЛЛ) Может кто-нибудь выложить реально работающий проект на C# с одним свойством/полем/методом , к которому можно обратиться из 1сv8 ?
#57
by Rie
Выложить готовый - не вижу смысла. Ты уже использовал готовые - но они не работали, так ведь? Попытайся лучше создать свою внешнюю компоненту "с нуля". Чтобы понять - что и как делается. Не используй UserControl - чтобы не думать, а как же будет этот UserControl взаимодействовать с 1С. Начни с пустой библиотеки классов, содержащей некоторый класс, который и будет реализовывать объект внешней компоненты. Включи в эту библиотеку интерфейсы IInitDone, ILanguageExtender (прочие тебе пока что не понадобятся). Убедись, что их Guid - именно такие, какие хочет видеть 1С, и что они будут _видимы в COM_ (атрибут COMVisible - либо у них, либо у сборки в целом). Также сделай видимым для COM объект внешней компоненты (пусть это будет Privet), задай ему ProgId("AddIn.Privet"). На первом этапе пусть Privet реализует только интерфейс IInitDone. Включи в конструкторы объекта и реализацию методов IInitDone выдачу сообщений (что-нибудь вроде System.Windows.Forms.MessageBox("Выполняется Init"); (естественно, в сборку должны быть включены ссылки на System.Windows.Forms и прочие, которые потребуются). Получишь нечто вроде: public class AddInObj: IInitDone { } public void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection) { } public void Done { } public void GetInfo([MarshalAs(UnmanagedType.SafeArray,SafeArraySubType=VarEnum.VT_VARIANT)]ref object[] pInfo) { } } Регистрируешь эту сборку, используя regasm (обязательно /codebase) - и создаёшь в 1С объект внешней компоненты, используя ПодключитьВнешнююКомпоненту. Теперь - либо объект создался (и ты получил кучу "Hello!"), либо что-то не срослось. В случае неудачи - получишь сообщения об ошибке. Сообщи, какие именно - и ответить тебе будет легче. Если же всё сработало - пойдём дальше.
#60
by los_hooliganos
сейчас нет времени почитать и понять, но интересно. в выходные хочу поразбираться что ты написал, ибо создание внешних компонент тоже интересно. А тему быстро найти поможет: "темы с моим участием".
#61
by Ион
УРА !!! ЗАРАБОТАЛО !!! Rie , спасибо тебе большое за терпеливые разъяснения - не хватало у меня правильной регистрациии , не хватало /codebase , а так весь код 1с и C# в и рабочий ( еще в мне про регистрацию писали , но я думал из прочитанных материалов , что можно вроде и так регистрировать : - но так ничего не дает (так я зарегистрировал в начале - нашел в какой-то статье), но в GAC dll находиться оказывается не обязательно, чтобы 1с могла эту dll "увидеть") . ========================================================================= Вообщем , вот , может кому пригодится , правильный вариант регистрации (в bat файл поместить след. две строки): RegAsm.exe WindowsControlLibrary1.dll /codebase /tlb: WindowsControlLibrary1.tlb @pause (и только так ! по другому не работает , несмотря на то, что пишут в разных статьях) на экране должно появиться что-то типа вот такого: C:Program Files1cv81in>RegAsm.exe WindowsControlLibrary1.dll /codebase /tlb: WindowsControlLibrary1.tlb Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.42 Copyright (C) Microsoft Corporation 1998-2004. All rights reserved. Types registered successfully Assembly exported to 'C:Program Files1cv81inWindowsControlLibrary1.tlb', an d the type library was registered successfully Press any key to continue . . . ======================== И насколько я понял , можно dll даже не подписывать - при регистрации RegAsm немножко поругается , но все равно зарегистрирует. Вот что примерно будет на экране: C:Program Files1cv81in>RegAsm.exe WindowsControlLibrary1.dll /codebase /tlb: WindowsControlLibrary1.tlb Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.42 Copyright (C) Microsoft Corporation 1998-2004. All rights reserved. RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can ca use your assembly to interfere with other applications that may be installed on the same computer. The /codebase switch is intended to be used only with signed assemblies. Please give your assembly a strong name and re-register it. Types registered successfully Assembly exported to 'C:Program Files1cv81inWindowsControlLibrary1.tlb', an d the type library was registered successfully Press any key to continue . . . ----------------- но все равно будет работать и в этом случае. И еще . Не обязательно "определить ресурс с номером 100 как имя объекта внешней компоненты." (как написано в - и так все работает без этого ресурса) Еще раз спасибо всем большое, особенно Rie
#62
by Ион
Да , еще что заметил. При правильной регистрации , если все нормально , то в реестре обязательно по ProgID можно найти в реестре ваши классы , которые есть в dll. Когда я регистрировал вот таким способом : @RegAsm.exe /tlb WindowsControlLibrary1.dll @gacutil.exe /i WindowsControlLibrary1.dll - то классов не видел , это породило некие подозрения , что дело возможно в регистрации.
#64
by Ион
Спасибо тебе , я упомянул в , что в уже было написано об этом. Но после того , как я написал , как я зарегистрировал - ты ничего не написал более, я и подумал , что так тоже можно 8=) Еще раз спасибо ;)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Описание для 1CML32.DLL и UNIZIP32.DLL
- Что такое NFR версия 1Сv8 и можноли ее использовать для
- Драйвер CAS AP-DB весов типа DB_RS232.dll, AP.dll,
- v7: ВК У кого - нибудь получалось совместно использовать 1CPP.dll и FormEx.dll?
- .Net: Регистрация dll в системе C#
- Управление торговлей 10.2 вместе с scanopos.dll, scaner1c.dll и USB сканером
- Чем грозит замена odbcbcp.dll, sqlsrv32.dll, sqlsrv32.dll, в Win7 ?
В этой группе 1С
- Ошибки при работе в Управление торговлей HELP!
- СКД итоги по вычисляемому полю
- СКД: СКД, программная настройке
- СКД: Компоновка не видит параметры
- УПП. УСН. Не закрываются суммы по "Операция (бухгалтерский и налоговый учет)"
- Переход с бухгалтерии базовой на проф
- Штрихкодирование документов - проблемы со сканером
- Как разбить период по неделям.
- Как вытащить одну организацию в отдельную базу из базы 1С8 где их ведется 2 и более?
- УПП. Одну спецификацию - на несколько изделий
- Порядок из новой конфигурации поставщика
- Создание первоначального образа в 1С:Бухгалтерии
- Случилось чудо: Roboform теперь работает с Google Chrome
- Подскажите как правильно очистить лог SQL базы.
- УПП невозвратные отходы
- Инструкция по разборке и сборки принтера Samsung ML 1210
- Новый релиз ЗУП: 2.5.17.8
- Как правильно использовать ОстаткиИОбороты и СКД?
- Налог на прибыль в УПП
- После вируса не могу запустить regedit msconfig (открываются в блокноте)