Форум программистов, компьютерный форум, киберфорум
1С: Администрирование и интеграция
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
1
1C 8.x

C# DLL d 1c

30.05.2015, 08:41. Показов 5079. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
COM библиотека. Зарегистрировал с помощью regasm, все прошло успешно, в регистре она тоже есть, но когда пытаюсь использовать в 1с пишет:
{Обработка.РаботаСМетками.Форма.Форма.Форма(3)}: Ошибка при вызове конструктора (COMОбъект)
МойОбъект = Новый COMОбъект("COMRFID.RFID");
по причине:
-2147024894(0x80070002): Не удается найти указанный файл.

Почему так? Что я делаю не так?

1C
1
2
3
4
5
6
7
Процедура ЧтениеМеток(Команда)
    МойОбъект = Новый COMОбъект("COMRFID.RFID");
    МойОбъект.StartReading();
    Объект.Метки = МойОбъект.GetAllTags();
    МойОбъект.StopReading();
    МойОбъект.DisconnectFromReader();  
    КонецПроцедуры
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2015, 08:41
Ответы с готовыми решениями:

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll,...

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу...

16
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
01.06.2015, 14:20 2
Цитата Сообщение от V0vchik Посмотреть сообщение
COMRFID.RFID
Что это?

Обычно COM реализовывается в dll
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
02.06.2015, 10:03  [ТС] 3
Dethmontt, COMRFID это сама библиотека, а RFID это класс. Сама библиотека зарегистрирована через regasm и в регистре я ее вижу, но вызвать функционал не могу.

Добавлено через 3 часа 27 минут
Как вообще должна быть написана библиотека чтоб можно было ее вызывать из 1с? Guid присвоил, ProgID тоже, COM Visible включил, подписал strong name, не работает и все
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
03.06.2015, 00:22 4
Для C#
<namespace>.<Class>

Добавлено через 23 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace Hello1C_
{
 
    [Guid("66F9DF27-2924-48BA-A4EC-F5F4E40484BB")]
    internal interface IMyClass
    {
        [DispId(1)]
        //описываем методы которые можно будет вызывать из вне
        string GetString_();
    }
 
   [Guid("3187FC44-C0AC-4D11-89AB-C3D09B70AB47"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents //для событий
    {
    }
 
    [Guid("27E78B9F-AAFE-48DD-8BB7-4D402E5F3BEE"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
        public class MyClass : IMyClass 
 
    {
        public string GetString_()
        {       
            return "Hello world ВК";
        }
    } 
 
}
1C
1
My_VK = New COMObject("Hello1C_.MyClass")
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
03.06.2015, 06:58  [ТС] 5
Dethmontt, не работает. Добавил изображения. Код почти тотже что и у вас:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace Hello
{
 
    [Guid("66F9DF27-2924-48BA-A4EC-F5F4E40484BB")]
    internal interface IMyClass
    {
        [DispId(1)]
        //описываем методы которые можно будет вызывать из вне
        string GetString();
    }
 
    [Guid("3187FC44-C0AC-4D11-89AB-C3D09B70AB47"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents //для событий
    {
    }
 
    [Guid("27E78B9F-AAFE-48DD-8BB7-4D402E5F3BEE"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class MyClass : IMyClass
    {
        public string GetString()
        {
            return "Hello world ВК";
        }
    }
 
}
Миниатюры
C# DLL d 1c   C# DLL d 1c   C# DLL d 1c  

C# DLL d 1c  
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
03.06.2015, 08:07  [ТС] 6
Dethmontt, все с com разобрался, но счас другая проблема. На моем ноутбуке в 1с работает нормально, а на других компьютерах не вызывается. Пишет что класс не зарегистрирован. Хотя если я из JavaScript с помощью cscript все работает и в регистре она есть. В чем может быть дело?
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
03.06.2015, 09:40 7
Зачем /tlb и /codebase при регистрации?
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
03.06.2015, 09:49  [ТС] 8
Dethmontt, тоже гдето это видел. codebase для регистрации в gac а tlb без понятия. Как правильно это делать? И после второй компиляции на моем ноутбуке тоже перестает работать, а если создать новый проект с абсолютно темже кодом то все работает. Как это все вообще работает никак не могу понять?
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
03.06.2015, 09:56 9
Ну это особенности RegAsma

Добавлено через 29 секунд
Тут более подробно что и зачем нужно

https://msdn.microsoft.com/ru-... .110).aspx
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
03.06.2015, 14:22  [ТС] 10
Dethmontt, всеравно както непонятно почему эти dll не работают в 1с на других компьютерах. На другом компьютере зарегистрировал и через JS я могу вызывать эту библиотеку, но через 1с нет. В чем может быть дело? Может в 1с еще что-то нужно подкидывать чтоб она их подхватывала? Или куда-то именно в 1с
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
03.06.2015, 14:25 11
Синт. помощник 1С
COMОбъект (COMObject)
По имени приложения
Синтаксис:

Новый COMОбъект(<Имя>, <ИмяСервера>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
ProgID класса COM, с которым он зарегистрирован в системе. Например, "Excel.Application".
<ИмяСервера> (необязательный)

Тип: Строка.
Имя компьютера, на котором надо создать указанный объект. Если параметр опущен, то создается на данном компьютере.
Описание:

Создает COM-объект внешнего приложения.
Пример:

Word = Новый COMОбъект("Word.Application");

V8 = Новый COMОбъект("V8.Application");
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
04.06.2015, 06:35  [ТС] 12
Dethmontt, все таже проблема. JS на другом компьютере вызывает эту библиотеку и без проблем ее использует а 1с говорит мне что она не зарегистрирована. ProgId использую тотже
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
04.06.2015, 07:57  [ТС] 13
Dethmontt,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Sdk;
 
namespace AnotherBro
{
    [Guid("BF3FB918-C643-4678-9BD9-25C7846CE328")]
    public interface ILetsDoDis
    {
        void StartReading();
        void StopReading();
        void DisconnectFromReader();
        string GetAllTags();
        void MessageTags();
    }
 
    [Guid("E436E98A-A448-4618-BB47-9A27369E2DB0"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents
    {
    }
 
    [Guid("745C75C6-C78F-4A93-BFCE-3872339A8F36"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class LetsDoDis : ILetsDoDis
    {
        public string readerName;
        public ImpinjReader reader;
 
        //Reader special fields
        public List<string> tags;
        public static List<int> counters;
        public System.Timers.Timer timer;
        public bool readFired;
 
        //Writer special fields
        public Random random;
        public bool writeFired;
        public const ushort EPC_OP_ID = 123;
        public const ushort PC_BITS_OP_ID = 321;
 
        public LetsDoDis()
        {
            reader = new ImpinjReader();
            readerName = "speedwayr-10-E5-09";
        }
 
        public void MessageTags()
        {
            MessageBox.Show("" + GetAllTags());
        }
 
        public void StartReading()
        {
            readFired = false;
            reader.Connect(readerName);
 
            timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
 
            tags = new List<string>();
            counters = new List<int>();
 
            //Configure reader
            reader.TagsReported += OnTagsReportedReading;
            reader.ApplyDefaultSettings();
 
            reader.Start();
            timer.Start();
 
            while (!readFired)
            { }
        }
 
        public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            readFired = true;
            for (int i = 0; i < counters.Count; i++)
            {
                counters[i]++;
            }
        }
 
        public void StopReading()
        {
            reader.Stop();
            timer.Stop();
        }
 
        public void DisconnectFromReader()
        {
            reader.Disconnect();
        }
 
        public void OnTagsReportedReading(ImpinjReader sender, TagReport report)
        {
            foreach (Tag tag in report)
            {
                if (!tags.Contains(tag.Epc.ToHexString()))
                {
                    tags.Add(tag.Epc.ToHexString());
                    counters.Add(0);
                }
                else
                {
                    counters[tags.IndexOf(tag.Epc.ToHexString())] = 0;
                }
            }
        }
 
        public string GetAllTags()
        {
            if (tags.Count < 1)
                return null;
 
            string result = "";
 
            for (int i = 0; i < tags.Count; i++)
            {
                result += tags[i] + ";";
            }
 
            return result;
        }
    }
}
Если вкратце то вызываем StartReading() -> MessageTags() -> StopReading() -> DisconnectFromReader()
MessageTags() выводит окно WinForms (MessageBox) где отображает результаты сканирования.

1C
1
2
3
4
5
6
7
Процедура ПриНачалеРаботыСистемы()
RFID = Новый COMОбъект("AnotherBro.LetsDoDis");
RFID.StartReading();
Сообщить(RFID.GetAllTags());
RFID.StopReading();
RFID.DisconnectFromReader();
КонецПроцедуры
Javascript
1
2
3
4
5
var obj = new ActiveXObject("AnotherBro.LetsDoDis");
obj.StartReading();
obj.MessageTags();
obj.StopReading();
obj.DisconnectFromReader();
В JS работает а в 1с нет. Добавил пару скриншотов работы. Вообще не понимаю что не так.
Миниатюры
C# DLL d 1c   C# DLL d 1c  
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
05.06.2015, 13:36 14
Лучший ответ Сообщение было отмечено V0vchik как решение

Решение

V0vchik, база файловая?

Добавлено через 6 минут
Ну или выполняй на JS =))))

Вот пример:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
        ScrptCtrl.Language="jscript";
        ScrptCtrl.AddCode("function Eprst()
        |{
        |  var obj = new ActiveXObject(""AnotherBro.LetsDoDis"");
        |  obj.StartReading();
        |  obj.MessageTags();
        |  obj.StopReading();
        |  obj.DisconnectFromReader();
        |}
        |");
 
     ScrptCtrl.Run("Eprst");
1
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
06.06.2015, 08:27  [ТС] 15
Dethmontt, кажется да.
Оу а это интересное решение, спасибо)

Добавлено через 9 минут
Цитата Сообщение от Dethmontt Посмотреть сообщение
function Eprst()
Какая интересная функция
0
12 / 12 / 13
Регистрация: 06.03.2011
Сообщений: 166
07.06.2015, 09:24  [ТС] 16
Dethmontt, мне нужно вызывать RFID.GetAllTags() которые возвращает строку. Тут такой способ может не подойти. Можно ли в 1с из JS скрипта получить это значение?
0
Модератор
Эксперт 1С
3792 / 2970 / 591
Регистрация: 10.03.2011
Сообщений: 11,694
Записей в блоге: 1
07.06.2015, 23:56 17
V0vchik, просто так не получить!
Из скрипта на JS результат выполнения функции можно получить двумя способами
1. Записать результат в файл
2. Использовать в 1С поле HTML документа, на нем исполнять скрипт и результат читать из HTML документа
0
07.06.2015, 23:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2015, 23:56
Помогаю со студенческими работами здесь

Добавление своей dll в список dll подгружаемых процессом чужого процесса
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не...

Как использовать методы библиотеки DLL, и игнорировать их, когда DLL нету?
Как использовать методы библиотеки DLL , и игнорировать их когда DLL нету Что нужно , мне нужно...

Точка входа в процедуру EventSetInformation не найдена в библиотеке DLL advapi32.dll
Здравствуйте. Столкнулся с такой проблемой, в какой-то момент у меня просто перестал запускаться...

Точка входа в процедуру InitializeCriticalSectionEx не найдена в библиотеке DLL KERNEL32.dll
Здравствуйте, коллеги! Случилась такая вещь. Малолетний внук что-то нажимал на клаве, выключил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru