Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

E14-140 Lusbapi For C#

Вы не вошли.

 Поиск | Регистрация | Вход 

24.09.2018 14:37:19
#1

Участник
Здесь с 26.02.2018
Сообщений: 9

E14-140 Lusbapi For C#

Здравствуйте.
Пытаюсь сделать обертку на C# для Lusbapi.dll
Реализовал классы по аналогии со струкуторами
Snimok1.jpg
на вызове открытии устройства выбивает исключение.
Snimok.jpg
До этого момента было достаточно много тем где пытались решить реализацию обертки. Но конечного или частично реализации найти не удалось.
Для других DLL(управление аналогичными USB измерительными устройствами) все решалось DLLImport и все работало как часы.

25.09.2018 13:38:13
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,488

Re: E14-140 Lusbapi For C#

Библиотека Lusbapi предоставляет пользователю всего две импортируемые функции: GetDllVersion() и CreateLInstance().
При этом функция CreateLInstance() возвращает фактически указатель на интерфейс взаимодействия с модулей. В интерпретации С++ этот интерфейс (в Вашем случае) представляет из себя чисто абстрактный класс типа ILE140 (подробнее см. Lusbapi.h). Например:

       // попробуем получить указатель на интерфейс взаимодействия с модулем
	ILE140 *pModule = static_cast<ILE140 *>(CreateLInstance("e140"));

Всё дальнейшее взаимодействие с модулем осуществляется с помощью полученного указателя, используя только методы класса ILE140.

25.09.2018 15:32:43
#3

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Тихомиров Сергей пишет:

Библиотека Lusbapi предоставляет пользователю всего две импортируемые функции: GetDllVersion() и CreateLInstance().
При этом функция CreateLInstance() возвращает фактически указатель на интерфейс взаимодействия с модулей. В интерпретации С++ этот интерфейс (в Вашем случае) представляет из себя чисто абстрактный класс типа ILE140 (подробнее см. Lusbapi.h). Например:

       // попробуем получить указатель на интерфейс взаимодействия с модулем
	ILE140 *pModule = static_cast<ILE140 *>(CreateLInstance("e140"));

Всё дальнейшее взаимодействие с модулем осуществляется с помощью полученного указателя, используя только методы класса ILE140.

Так указатель я получаю. Через marshal.ptrtostructure. Как через этот указатель использовать методы, если не тем способом как у меня? Если реализовать сделать интерфейс и сослаться на него, то необходимо реализовать методы....

25.09.2018 16:49:15
#4

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,488

Re: E14-140 Lusbapi For C#

Насколько я могу понять, Вы пытаетесь импортировать из библиотеки Lusbapi функции типа OpenLDevice(), CloseLDevice() и т.д. А таких импортируемых функций в библиотеке Lusbapi в принципе нет, это просто методы чисто абстрактного класса. Именно поэтому при компиляции и возникает ошибка "System.EntryPointNotFountException: 'Не удаётся найти точку входа OpenLDevice в DLL Lusbapi.dll'".

26.09.2018 10:17:02
#5

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Тихомиров Сергей пишет:

Насколько я могу понять, Вы пытаетесь импортировать из библиотеки Lusbapi функции типа OpenLDevice(), CloseLDevice() и т.д. А таких импортируемых функций в библиотеке Lusbapi в принципе нет, это просто методы чисто абстрактного класса. Именно поэтому при компиляции и возникает ошибка "System.EntryPointNotFountException: 'Не удаётся найти точку входа OpenLDevice в DLL Lusbapi.dll'".

Попробовал передать указатель интерфейсу. Тоже не работает.
26092018.jpg
Можете показать пример хотя бы для 1й функции? Или может есть протокол передачи дынных, что бы полностью вручную реализовать управление.

26.09.2018 17:33:44
#6

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,488

Re: E14-140 Lusbapi For C#

1. Я сам не использую C# (по крайне мере пока).
2. Насколько я понимаю Marshal.GetObjectForIUnknown() должна принимать IntPtr, указывающий на COM объект. Но у нас никаких COM объектов нет.  Как мне видится нужно попробовать средствами C# адекватно описать чисто абстрактный класс ILE140 (если это вообще возможно), а  затем произвести корректное приведение типов полученного указателя pModule к этому классу (интерфейсу).
3. Про протокол передачи дынных совсем ничего не понял. Каких данных и куда?

27.09.2018 08:16:13
#7

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Тихомиров Сергей пишет:

1. Я сам не использую C# (по крайне мере пока).
2. Насколько я понимаю Marshal.GetObjectForIUnknown() должна принимать IntPtr, указывающий на COM объект. Но у нас никаких COM объектов нет.  Как мне видится нужно попробовать средствами C# адекватно описать чисто абстрактный класс ILE140 (если это вообще возможно), а  затем произвести корректное приведение типов полученного указателя pModule к этому классу (интерфейсу).
3. Про протокол передачи дынных совсем ничего не понял. Каких данных и куда?

Я правильно понимаю:
Экспортируется метод(CreateLInstance("e140")) для получение указателя на USB устройство по имени. Далее  ссылка на устройство передается в методы реализованные в библиотеке  Lusbapi.lib То есть по факту Lusbapi.dll нужна исключительно для поиска USB модуля (в данном случае "e140"). Из за чего и не получается некоем образом использовать эту DLL на С#.
То есть если я хочу на C# работать с модулем, мне необходимо полностью реализовать(а не только интерфейс/абстрактный класс) библиотеку Lusbapi.lib ?

Под протоколом я подразумеваю протокол. Размер пакетов(и формат). Набор команд на установку параметров и набор ответов от модуля.

27.09.2018 09:42:08
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: E14-140 Lusbapi For C#

Для работы в C# для lcomp в свое время был написан сишный враппер wlcomp с обычными функциями и сишными объявлениями структур. и то  там надо ручкми было много написать для шарпа (поиском по форуму должны быть ссылки). для lusbapi я не помню есть ли у меня враппер (возможно тоже писал). в понедельник как выйду из отпуска посмотрю.

27.09.2018 12:53:02
#9

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,488

Re: E14-140 Lusbapi For C#

1. Файл библиотеки импорта Lusbapi.lib никакой реализации в себе не содержит. Вся реализация взаимодействия с железом содержится именно в файле библиотеки Lusbapi.dll. А lib-файл просто содержит в себе список функций, экспортируемых из DLL, и необходим исключительно для статической компоновки проекта.
2. Ещё раз: функция CreateLInstance("e140") возвращает указатель на конкретную реализацию некоего класса, который знает о модуле всё. Далее, в нормальный языках программирования обычно можно провести процедуру приведения типа (например, static_cast) полученного указателя к интерфейсу ILE140 (чисто абстрактный класс). После чего уже через приведённый интерфейс ILE140 пользователь получает доступ к реализации класса, который умеет управлять всем железом модуля.
3. Все тонкости взаимодействия с железом модуля можно найти в низкоуровневом описании на модуль E14-140:
                              www.lcard.ru/download/e14-140_low_level.pdf
Также доступны все исходные тексты библиотеки Lusbapi, где можно найти всю подноготную штатной реализации этого взаимодействия.

01.10.2018 13:14:50
#10

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Poul пишет:

Для работы в C# для lcomp в свое время был написан сишный враппер wlcomp с обычными функциями и сишными объявлениями структур. и то  там надо ручкми было много написать для шарпа (поиском по форуму должны быть ссылки). для lusbapi я не помню есть ли у меня враппер (возможно тоже писал). в понедельник как выйду из отпуска посмотрю.

все ссылки на wlcomp уже недействительны, а в lcomp.Exe нет обертки. Не могли бы вы выслать, то что есть? может на другие модули хотя бы. за ранее спасибо

Тихомиров Сергей пишет:

Все тонкости взаимодействия с железом модуля можно найти в низкоуровневом описании на модуль E14-140:
                              www.lcard.ru/download/e14-140_low_level.pdf

К сожалению для меня это совсем бесполезно, т.к. у меня все модификации (e14-14, e14-14D,e14-14M и т.п.)

01.10.2018 16:24:21
#11

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: E14-140 Lusbapi For C#

в lcomp.exe должна быть папка WLCOMP после установки.  lcomp.exe брать в Библиотеке файлов. к сожалению для lusbapi я не писал полного враппера...

10.12.2018 14:22:08
#12

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Опять возобновили попытку установить связь с модулями, на этот раз через wlcomp Snimok.jpg
В ошибка указывает, что неверна сигнатура. Типы данных от сюда https://msdn.microsoft.com/ru-ru/library/0wf2yk2k.aspx . Любые другие параметры сигнатуры вызывают туже ошибку.

10.12.2018 14:52:46
#13

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: E14-140 Lusbapi For C#

когда то давно было так http://www.lcard.ru/forums/viewtopic.php?id=7251&p=2 как изменился C# с тех пор я честно говоря не знаю. не работаю с ним. но он должен быть точно в 32 битном ррежиме для wlcomp.

11.12.2018 13:07:40
#14

Участник
Здесь с 26.02.2018
Сообщений: 9

Re: E14-140 Lusbapi For C#

Poul пишет:

когда то давно было так http://www.lcard.ru/forums/viewtopic.php?id=7251&p=2 как изменился C# с тех пор я честно говоря не знаю. не работаю с ним. но он должен быть точно в 32 битном ррежиме для wlcomp.

так у меня так и есть. ULONG тоже самое что и UInt32. Возможен вариант оформить договор на разработку библиотеки?

11.12.2018 15:43:35
#15

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: E14-140 Lusbapi For C#

Это в офис надо обращаться.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск