Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Вс авг 19, 2012 15:27:35
Так и делал, далее при тестировании выдавало что-то типа: "невозможно обратиться к 0 адресу" или что-то подобное, но уже не важно, я уже все сделал на тех библиотеках, которые вы мне посоветовали))
Все работает, только пришлось (для универсальности программы) делать целых 3 модуля:
HID_Lib_Plus.vbСпойлер
Public Function HID_CloseDevice(ByVal Handle As Integer) As Integer
If System.IntPtr.Size = 4 Then
HID_CloseDevice = HID_Lib_Plus_x86.HID_Lib_Plus_CloseDevice(Handle)
Else
HID_CloseDevice = HID_Lib_Plus_x64.HID_Lib_Plus_CloseDevice_x64(Handle)
End If
End Function HID_Lib_Plus_x64.vbСпойлер
Private Declare Function HID_CloseDevice Lib "HID_Lib_Plus_x64.dll" (ByVal Handle As Integer) As Integer
Public Function HID_Lib_Plus_CloseDevice_x64(ByVal Handle As Integer) As Integer
HID_Lib_Plus_CloseDevice_x64 = HID_Lib_Plus_x64.HID_CloseDevice(Handle)
End Function HID_Lib_Plus_x86.vbСпойлер
Private Declare Function HID_CloseDevice Lib "HID_Lib_Plus.dll" (ByVal Handle As Integer) As Integer
Public Function HID_Lib_Plus_CloseDevice(ByVal Handle As Integer) As Integer
HID_Lib_Plus_CloseDevice = HID_Lib_Plus_x86.HID_CloseDevice(Handle)
End FunctionИ это все потому, что 2 библиотеки (х86 и х64) имеют одинаково названные функции... С другими функциями так-же...
Вс авг 19, 2012 15:42:35
В VB вроде есть алиасы с помощью которых можно изменить имя импортируемой функции.
Можно так же использовать условную компиляцию чтобы собирать программу под требуемую платформу. В этом случае, одинаковые имена не помеха.
Вс авг 19, 2012 15:47:57
Да, вы правы, есть, но вот давать другие имена я не умею, а с условной компиляцией не пробовал... Буду разбираться))) Спс))
Все, разобрался, использую Alias))
Теперь только 1 модуль:
HID_Lib_Plus
Спойлер
Module HID_Lib_Plus
' x86
Private Declare Function HID_OpenDevice_x86 Lib "HID_Lib_Plus.dll" Alias "HID_OpenDevice" (ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
Private Declare Function HID_CloseDevice_x86 Lib "HID_Lib_Plus.dll" Alias "HID_CloseDevice" (ByVal Handle As Integer) As Integer
Private Declare Function HID_ReadDevice_x86 Lib "HID_Lib_Plus.dll" Alias "HID_ReadDevice" (ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
Private Declare Function HID_WriteDevice_x86 Lib "HID_Lib_Plus.dll" Alias "HID_WriteDevice" (ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
Private Declare Function HID_DeviceTest_x86 Lib "HID_Lib_Plus.dll" Alias "HID_DeviceTest" (ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
' x64
Private Declare Function HID_OpenDevice_x64 Lib "HID_Lib_Plus_x64.dll" Alias "HID_OpenDevice" (ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
Private Declare Function HID_CloseDevice_x64 Lib "HID_Lib_Plus_x64.dll" Alias "HID_CloseDevice" (ByVal Handle As Integer) As Integer
Private Declare Function HID_ReadDevice_x64 Lib "HID_Lib_Plus_x64.dll" Alias "HID_ReadDevice" (ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
Private Declare Function HID_WriteDevice_x64 Lib "HID_Lib_Plus_x64.dll" Alias "HID_WriteDevice" (ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
Private Declare Function HID_DeviceTest_x64 Lib "HID_Lib_Plus_x64.dll" Alias "HID_DeviceTest" (ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
Public Function HID_OpenDevice(ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
If System.IntPtr.Size = 4 Then
HID_OpenDevice = HID_OpenDevice_x86(PID, VID, VersionNumber, Index)
Else
HID_OpenDevice = HID_OpenDevice_x64(PID, VID, VersionNumber, Index)
End If
End Function
Public Function HID_CloseDevice(ByVal Handle As Integer) As Integer
If System.IntPtr.Size = 4 Then
HID_CloseDevice = HID_CloseDevice_x86(Handle)
Else
HID_CloseDevice = HID_CloseDevice_x64(Handle)
End If
End Function
Public Function HID_ReadDevice(ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
If System.IntPtr.Size = 4 Then
HID_ReadDevice = HID_ReadDevice_x86(Handle, buffer, Len)
Else
HID_ReadDevice = HID_ReadDevice_x64(Handle, buffer, Len)
End If
End Function
Public Function HID_WriteDevice(ByVal Handle As Integer, ByVal buffer() As Byte, ByVal Len As Integer) As Integer
If System.IntPtr.Size = 4 Then
HID_WriteDevice = HID_WriteDevice_x86(Handle, buffer, Len)
Else
HID_WriteDevice = HID_WriteDevice_x64(Handle, buffer, Len)
End If
End Function
Public Function HID_DeviceTest(ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Short, ByVal Index As Short) As Integer
If System.IntPtr.Size = 4 Then
HID_DeviceTest = HID_DeviceTest_x86(PID, VID, VersionNumber, Index)
Else
HID_DeviceTest = HID_DeviceTest_x64(PID, VID, VersionNumber, Index)
End If
End Function
End Module
Пн авг 20, 2012 21:27:15
У меня возникла проблема с VB6.0 - в переменную "VersionNumber" надо затолкать число, большее, чем 32'767, т.е. там что-то в районе 42'000. Совершенно не представляю, как мне объявить переменную из двух байт, может как два аргумента, типа
"Ver1 as byte, Ver0 as Byte"
Какие будут советы?
Ни на одну из пар VID-PID (найденных в диспечтере устройств) не реагирует библиотека, видимо из-за того, что подключение к устройствам уже установлено из среды WinXP. Плату с ATmega8A скоро изготовлю, надеюсь не впустую...
Вт авг 21, 2012 09:50:13
VOG-NevaDA писал(а):Совершенно не представляю, как мне объявить переменную из двух байт
Переменная не должна состоять из двух байт, точнее издвух переменных, а должна занимать в памяти два байта.
Если
верить этому, то тип переменной должен быть Integer.
"VersionNumber" это не обяхательный параметр. В мето него можо указать -1 и тогда будет производится поиск только по PID и VID.
Для примера, вот кусок кода на VB6.
http://www.radiokot.ru/forum/viewtopic. ... 74#p446274 - Код:
Dim vid As Integer = 5824
Dim pid As Integer = 1503
Dim ver As Integer = -1
Dim ind As Integer = 0
Dim Handle As Integer
Dim res
Dim CountInputBuffers
Handle = HID_OpenDevice(pid, vid, ver, ind)
VOG-NevaDA писал(а):Ни на одну из пар VID-PID (найденных в диспечтере устройств) не реагирует библиотека
Скорее всего не правильно указываете эти идентификаторы.
Что покажет эта программа?
http://www.radiokot.ru/forum/viewtopic. ... 86#p446286
Ср авг 22, 2012 23:05:07
Всё, собрал плату, определяется как HID, но функция HID_DeviceTest возвращает 0 при всех вариантах входных параметров...
- Вложения
-
- 3.GIF
- (14.6 KiB) Скачиваний: 657
Чт авг 23, 2012 09:07:14
VOG-NevaDA писал(а):но функция HID_DeviceTest возвращает 0 при всех вариантах входных параметров
На скриншоте данные указаны в шестнадцатеричной системе счисления.
Это учтено в коде?
Вс авг 26, 2012 05:25:00
Простите, что долго не отвечал. Само собой учтено, пишется как &H2010 и т.д., это я знаю, ошибок в программе вроде не допускал, может только я зря 2-х байтовый аргумет обозвал Integer'ом...
Вс авг 26, 2012 07:16:04
Я ставил алгоритм, перебирающий все возможные варианты индексов - бесполезно. Версию пробовал -1 и 0 - тот же эффект...