|
- Участник
- Здесь с 26.02.2018
- Сообщений: 9
|
E14-140 Lusbapi For C#
Здравствуйте. Пытаюсь сделать обертку на C# для Lusbapi.dll Реализовал классы по аналогии со струкуторами
на вызове открытии устройства выбивает исключение.
До этого момента было достаточно много тем где пытались решить реализацию обертки. Но конечного или частично реализации найти не удалось. Для других DLL(управление аналогичными USB измерительными устройствами) все решалось DLLImport и все работало как часы.
|
|
- Сотрудник "Л Кард"
- Здесь с 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.
|
|
- Участник
- Здесь с 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. Как через этот указатель использовать методы, если не тем способом как у меня? Если реализовать сделать интерфейс и сослаться на него, то необходимо реализовать методы....
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,488
|
Re: E14-140 Lusbapi For C#
Насколько я могу понять, Вы пытаетесь импортировать из библиотеки Lusbapi функции типа OpenLDevice(), CloseLDevice() и т.д. А таких импортируемых функций в библиотеке Lusbapi в принципе нет, это просто методы чисто абстрактного класса. Именно поэтому при компиляции и возникает ошибка "System.EntryPointNotFountException: 'Не удаётся найти точку входа OpenLDevice в DLL Lusbapi.dll'".
|
|
- Участник
- Здесь с 26.02.2018
- Сообщений: 9
|
Re: E14-140 Lusbapi For C#
Тихомиров Сергей пишет:Насколько я могу понять, Вы пытаетесь импортировать из библиотеки Lusbapi функции типа OpenLDevice(), CloseLDevice() и т.д. А таких импортируемых функций в библиотеке Lusbapi в принципе нет, это просто методы чисто абстрактного класса. Именно поэтому при компиляции и возникает ошибка "System.EntryPointNotFountException: 'Не удаётся найти точку входа OpenLDevice в DLL Lusbapi.dll'".
Попробовал передать указатель интерфейсу. Тоже не работает.
Можете показать пример хотя бы для 1й функции? Или может есть протокол передачи дынных, что бы полностью вручную реализовать управление.
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,488
|
Re: E14-140 Lusbapi For C#
1. Я сам не использую C# (по крайне мере пока). 2. Насколько я понимаю Marshal.GetObjectForIUnknown() должна принимать IntPtr, указывающий на COM объект. Но у нас никаких COM объектов нет. Как мне видится нужно попробовать средствами C# адекватно описать чисто абстрактный класс ILE140 (если это вообще возможно), а затем произвести корректное приведение типов полученного указателя pModule к этому классу (интерфейсу). 3. Про протокол передачи дынных совсем ничего не понял. Каких данных и куда?
|
|
- Участник
- Здесь с 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 ? Под протоколом я подразумеваю протокол. Размер пакетов(и формат). Набор команд на установку параметров и набор ответов от модуля.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-140 Lusbapi For C#
Для работы в C# для lcomp в свое время был написан сишный враппер wlcomp с обычными функциями и сишными объявлениями структур. и то там надо ручкми было много написать для шарпа (поиском по форуму должны быть ссылки). для lusbapi я не помню есть ли у меня враппер (возможно тоже писал). в понедельник как выйду из отпуска посмотрю.
|
|
- Сотрудник "Л Кард"
- Здесь с 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, где можно найти всю подноготную штатной реализации этого взаимодействия.
|
|
- Участник
- Здесь с 26.02.2018
- Сообщений: 9
|
Re: E14-140 Lusbapi For C#
Poul пишет:Для работы в C# для lcomp в свое время был написан сишный враппер wlcomp с обычными функциями и сишными объявлениями структур. и то там надо ручкми было много написать для шарпа (поиском по форуму должны быть ссылки). для lusbapi я не помню есть ли у меня враппер (возможно тоже писал). в понедельник как выйду из отпуска посмотрю.
все ссылки на wlcomp уже недействительны, а в lcomp.Exe нет обертки. Не могли бы вы выслать, то что есть? может на другие модули хотя бы. за ранее спасибо К сожалению для меня это совсем бесполезно, т.к. у меня все модификации (e14-14, e14-14D,e14-14M и т.п.)
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-140 Lusbapi For C#
в lcomp.exe должна быть папка WLCOMP после установки. lcomp.exe брать в Библиотеке файлов. к сожалению для lusbapi я не писал полного враппера...
|
|
- Участник
- Здесь с 26.02.2018
- Сообщений: 9
|
Re: E14-140 Lusbapi For C#
Опять возобновили попытку установить связь с модулями, на этот раз через wlcomp В ошибка указывает, что неверна сигнатура. Типы данных от сюда https://msdn.microsoft.com/ru-ru/library/0wf2yk2k.aspx . Любые другие параметры сигнатуры вызывают туже ошибку.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 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.
|
|
- Участник
- Здесь с 26.02.2018
- Сообщений: 9
|
Re: E14-140 Lusbapi For C#
так у меня так и есть. ULONG тоже самое что и UInt32. Возможен вариант оформить договор на разработку библиотеки?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-140 Lusbapi For C#
Это в офис надо обращаться.
|