|   |   | 
| 
 | ПодключитьВнешнююКомпоненту возвращает ложь | ☑ | ||
|---|---|---|---|---|
| 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, тип)); } Просто если ты правишь исходники, то там можешь добавить функцию | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |