|
ПодключитьВнешнююКомпоненту возвращает ложь | ☑ | ||
---|---|---|---|---|
0
abuca
10.12.16
✎
18:20
|
Куда копать, подскажите...
Уже целый день, дальше 2х строк не сдинулся... &НаСервере Процедура ПодключитьНаСервере() Результат = ПодключитьВнешнююКомпоненту("C:\SDK Guard\ZGuard.dll", "Native", ТипВнешнейКомпоненты.Native); Возвращает ложь, хоть из макета, хоть из файла. В описании DLL поддерживает NativeAPI В папке с установленным SDK лежат 2 файла библиотеки: ZGuard.dll ZGuard.lib Это библиотека контроллера системы контроля доступа. Взято отсюда: https://ironlogic.ru/il.nsf/htm/ru_sdk-guard Комментарий оттуда: "SDK Guard предназначен для облегчения и ускорения интеграции сетевых контроллеров IronLogic с существующими или вновь создаваемыми программными комплексами, например, учета рабочего времени или контроля доступа. Основой SDK является DLL библиотека и программа-драйвер связи позволяющие осуществлять обмен информацией с перечисленными выше контроллерами" |
|||
1
Cool_Profi
10.12.16
✎
18:23
|
Пролистав страничку - не увидел там ни слова про 1с.
С какого перепо^Wугу она должна грузиться как внешняя компонента? |
|||
2
abuca
10.12.16
✎
18:34
|
т.е., продолжу, dll должна иметь совместимость с 1С?
Знаю, что этот контроллер пихнули в одну из жадных конфигураций "Фитнес". Использовали ли они этот SDK не знаю точно, но эта ссылка (со слов производителя оборудования) была передана разработчику Фитнес-клуба, Корп версия которого поддерживает данные контроллеры. Значит совместимо... |
|||
3
Cool_Profi
10.12.16
✎
18:39
|
"dll должна иметь совместимость с 1С?"
Внезапно, да? А слова к делу не подошьёшь. Берёшь производителя/поставщика за гланды и заставляешь его показать, как он подключает сей девайс к 1с. |
|||
4
abuca
10.12.16
✎
18:42
|
Жаль выходные терять.
Есть, как вариант, обмен с контроллером на Json, однако здесь я несилен. Не имел опыта. Но если не останется возможности, придется пробовать так. |
|||
5
Mauser
10.12.16
✎
18:59
|
(4) >...придется пробовать так
Уж извольте, батенька, не побрезгуйте рукавешки-то засучить. |
|||
6
lEvGl
гуру
10.12.16
✎
19:02
|
там есть исходники для ++, шарп, делфи
если напрямую не цепляется, то можно создать свою длл, комвидимую, в нее добавить эту и вызывать, делов на не долго |
|||
7
Mauser
10.12.16
✎
19:04
|
Имея заголовочные файлы и библиотеку, компонента пишется за день. Думаю, что разработчики "одной из жадных конфигураций "Фитнес"" так и сделали. По крайней мере плача на мисте от них не слышно.
|
|||
8
abuca
10.12.16
✎
20:16
|
(6)(7) намек ясен.
|
|||
9
Serginio1
10.12.16
✎
22:30
|
Или использовать нетовскую DLL через Использование классов .Net в 1С для новичков
|
|||
10
abuca
11.12.16
✎
18:45
|
Сегодня попробовал DynamicWrapperX
Геморрой с типами. Чертевчем возвращает (точнее все в целочисленном приходит), чертевчем надо отправлять в методы. Куча типов в виде структур тех же типов внутри. Воспользуюсь услугами по перекомпиляции нативной в СОМ. Запросил исходники. |
|||
11
H A D G E H O G s
11.12.16
✎
19:11
|
В описании говориться о native API, это никак не связано с 1С врешними NAPI компонентами. Там говорится о том, что библиотека - не КОМ, а просто предоставляет экспортные функции (ну типа работает в линуксах). Есть примеры импорта ее функций в Дельфи, C++, C# (заголовочные файлы). Фсе.
Дальше афтор крутится сам - либо пишет COM ВК, либо NAPI ВК поверх заголовочных файлов, ибо эти заголовочные файлы на свой вход требуют Структуры. |
|||
12
H A D G E H O G s
11.12.16
✎
19:11
|
А функций и структур там до чертовой бабушки.
|
|||
13
abuca
12.12.16
✎
13:31
|
(11)(12) Я Вам написал на ящик, указанный в ЛК.
Я, к сожалению, не программирую ни в чем кроме 1С. Мне затруднительно создать ВК. |
|||
14
abuca
12.12.16
✎
13:38
|
как вариант мне предложили это:
http://posix.ironlogic.ru/wiki/Z397_Guard Однако здесь надо напрямую кидать на порт. Предполагается, что контроллер подключен в сеть предприятия. |
|||
15
Serginio1
12.12.16
✎
15:30
|
(13) Надо понимать код. Скомпилируй из исходников C# и используй (9) Или попроси когонибудь, что бы написали
http://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802 |
|||
16
abuca
12.12.16
✎
20:10
|
(15) т.е. если у меня есть: ZGuard.cs
Его компилировать? В DLL? Но DLL у меня есть. можно ли вызвать ее Врап.ПолучитьТипИзСборки("ZGuard.ZG_CTR_EV_TYPE","C:\ZGuard\ZGuard.dll") ZGuard.cs Содержит след. код: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; using ZPort; // вот здесь еще интересно, ZPort.dll тоже имеется в той же папке namespace ZGuard public enum ZG_CTR_EV_TYPE { ZG_EV_UNKNOWN = 0, // Неизвестно ZG_EV_BUT_OPEN, // Открыто кнопкой изнутри ............ Получается, чтобы получить тип к примеру ZG_EV_BUT_OPEN нужно сделать так: врап=новый COMОбъект("NetObjectToIDispatch45"); Infrascturcture=Врап.ПолучитьТипИзСборки("ZGuard.ZG_CTR_EV_TYPE","C:\ZGuard\ZGuard.dll"); // что такое сборка? ОткрытоКнопкойИзнутри = Infrascturcture.ZG_EV_BUT_OPEN; //ЧТО ВЕРНЕТ??? COM-объект? |
|||
17
abuca
12.12.16
✎
20:52
|
Infrascturcture=Врап.ПолучитьТипИзСборки("ZGuard.ZG_CTR_EV_TYPE","C:\SDK Guard\ZGuard.dll");
Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку "file:///C:\SDK Guard\ZGuard.dll" либо одну из их зависимостей. Ожидалось, что модуль содержит манифест сборки. манифест... где-то я это слышал... |
|||
18
H A D G E H O G s
12.12.16
✎
21:16
|
(17) Ты путаешь классы NET, которые могут экспортироваться библиотекой NET (наверное) и тупо структуру в памяти, которая даже не экспортируется, а описывается в документации к dll, создается в памяти вызывающей программе, а в функцию dll передается указатель на данную структуру.
Но могу ошибаться. |
|||
19
abuca
12.12.16
✎
22:11
|
Создал проект C#. Загрузил в него исходный код библиотеки.
Вроде, что-то похожее на манифест получилось: using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Управление общими сведениями о сборке осуществляется с помощью // набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, // связанные со сборкой. [assembly: AssemblyTitle("ClassLibrary2")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClassLibrary2")] [assembly: AssemblyCopyright("Copyright © 2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Параметр ComVisible со значением FALSE делает типы в сборке невидимыми // для COM-компонентов. Если требуется обратиться к типу в этой сборке через // COM, задайте атрибуту ComVisible значение TRUE для этого типа. [assembly: ComVisible(true)] // Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM [assembly: Guid("7cbe13fd-216f-497e-833a-1fa27f2df570")] // Сведения о версии сборки состоят из следующих четырех значений: // // Основной номер версии // Дополнительный номер версии // Номер построения // Редакция // // Можно задать все значения или принять номер построения и номер редакции по умолчанию, // используя "*", как показано ниже: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] |
|||
20
abuca
12.12.16
✎
22:18
|
Теперь, другой конфуз. ZGuard.dll ссылается на ZPort.dll:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; using ZPort;//это ссылка на ZGuard.dll namespace ZGuard error CS0246: Не удалось найти имя типа или пространства имен "ZPort" (пропущена директива using или ссылка на сборку?) Есть код на C# обеих. Как в одном проекте 2 DLL собрать, чтобы вторая видела первую и собиралась??? |
|||
21
abuca
12.12.16
✎
22:55
|
Правильно, не отвечайте мне. В проекте надо было добавить ссылку и указать путь к dll.
Скомпилировалось. |
|||
22
Serginio1
13.12.16
✎
00:11
|
(21) Все dll должны лежать в одном месте. Удачи!
|
|||
23
H A D G E H O G s
13.12.16
✎
00:24
|
(22) Врап.ПолучитьТипИзСборки() получает NET класс из NET dll, ведь так?
|
|||
24
abuca
13.12.16
✎
00:37
|
Йеееее!!! Я это сделал!!!
Спасибо всем! Вижу все переменные, описанные в ZGuard.ZG_CTR_EV_TYPE ZG_EV_UNKNOWN = 0, // Неизвестно ZG_EV_BUT_OPEN, // Открыто кнопкой изнутри ZG_EV_KEY_NOT_FOUND, // Ключ не найден в банке ключей ZG_EV_KEY_OPEN, // Ключ найден, дверь открыта ZG_EV_KEY_ACCESS, // Ключ найден, доступ не разрешен ZG_EV_REMOTE_OPEN, // Открыто оператором по сети и т.д. дальше все понятно, вроде... |
|||
25
abuca
13.12.16
✎
00:38
|
(22)(15) Особенное спасибо. Повернули в нужную сторону.
|
|||
26
Serginio1
13.12.16
✎
09:58
|
(25) Спасибо! Я рад, что мои труды не напрасны.
|
|||
27
Serginio1
13.12.16
✎
10:00
|
(23) Да. Вернее получает Сом объект в который обернуты данные Типа. А из типа мы можем создать объект, получить доступ к статическим методам и свойствам.
|
|||
28
abuca
26.12.16
✎
11:08
|
Там в dll пара десятков функций. DLL не COM видимая. Голову сломал, как пробросить методы, чтобы их увидеть.
Все, плюнул. Делаю по протоколу. Уже пишу и читаю. Добрался до памяти контроллера. Думаю к НГ уже будет обработка обслуживания. |
|||
29
abuca
26.12.16
✎
11:10
|
(26)Однако персональное спасибо. Врап - классная штука. Буду пользоваться.
|
|||
30
abuca
26.12.16
✎
11:13
|
Вот такой монстр получается из-за логических преобразований байтов в отправке и получении (часть функции преобразования пакета на отправку в контроллер из 4х байт в 5):
Скрипт = Новый COMObject("MSScriptControl.ScriptControl"); Скрипт.language = "vbscript"; m4 = РазложитьСтрокуВМассив(ТекстСообщения); //вычисляем длину для отправки стр = "5 * Int((" + м4[1] + " + 3) / 4) + 1"; lgs = HEX(Скрипт.Eval("" + стр)); lgs_ = ToDEC(lgs,16); lgs = "&H" + lgs; //Контрольная сумма ht = 0; i=0; j=1; Пока i < м4.Количество()-1 Цикл ht ="&H" + HEX(Скрипт.eval("" + м4[i] + " + " + ht)); i = i + 1; КонецЦикла; Стр = ht + " - Int(" + ht + " / &H100) * &H100"; ht = "&H" + HEX(Скрипт.Eval("" + стр)); стр = "&H100 - " + ht; ht = "&H" + HEX(Скрипт.Eval("" + стр)); Если ht = "&H100" Тогда ht = "&H" + HEX(0); КонецЕсли; м4[0] = ht; // //пишем в буфер i=0; buff = новый массив(lgs_+1); j = 1;//1 i = 0; Пока j < lgs_ Цикл //'пишем в буфер //'формируем 0 байт стр = "((" + м4[i] + " AND " + "&H80)/&H10)+" + "((" + м4[i+1] + " AND " + "&H80)/&H20)+" + "((" + м4[i+2] + " AND " + "&H80)/&H40)+" + "((" + м4[i+3] + " AND " + "&H80)/&H80)"; |
|||
31
Serginio1
26.12.16
✎
13:14
|
Я как то отдельно не пользовался AND.
Но есть OR. Можно по образу и подобию создать и AND public object OR(params object[] параметры1) { if (параметры1.Length == 0) return null; object[] параметры = AutoWrap.ПолучитьМассивРеальныхОбъектов(параметры1); var парам = параметры[0]; var тип = парам.GetType(); long res = (long)Convert.ChangeType(парам, typeof(long)); for (int i = 1; i < параметры.Length; i++) res |= (long)Convert.ChangeType(параметры[i], typeof(long)); if (тип.IsEnum) { var ТипЗначений = Enum.GetUnderlyingType(тип); var number = Convert.ChangeType(res, ТипЗначений); return AutoWrap.ОбернутьОбъект(Enum.ToObject(тип, number)); } return AutoWrap.ОбернутьОбъект(Convert.ChangeType(res, тип)); } Просто если ты правишь исходники, то там можешь добавить функцию |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |