Так и делал, далее при тестировании выдавало что-то типа: "невозможно обратиться к 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 FunctionHID_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 FunctionHID_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) имеют одинаково названные функции... С другими функциями так-же...
В VB вроде есть алиасы с помощью которых можно изменить имя импортируемой функции.
Можно так же использовать условную компиляцию чтобы собирать программу под требуемую платформу. В этом случае, одинаковые имена не помеха.
Да, вы правы, есть, но вот давать другие имена я не умею, а с условной компиляцией не пробовал... Буду разбираться))) Спс))
Все, разобрался, использую 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
У меня возникла проблема с VB6.0 - в переменную "VersionNumber" надо затолкать число, большее, чем 32'767, т.е. там что-то в районе 42'000. Совершенно не представляю, как мне объявить переменную из двух байт, может как два аргумента, типа
"Ver1 as byte, Ver0 as Byte"
Какие будут советы?
Ни на одну из пар VID-PID (найденных в диспечтере устройств) не реагирует библиотека, видимо из-за того, что подключение к устройствам уже установлено из среды WinXP. Плату с ATmega8A скоро изготовлю, надеюсь не впустую...
VOG-NevaDA писал(а):Совершенно не представляю, как мне объявить переменную из двух байт
Переменная не должна состоять из двух байт, точнее издвух переменных, а должна занимать в памяти два байта.
Если верить этому, то тип переменной должен быть Integer.
"VersionNumber" это не обяхательный параметр. В мето него можо указать -1 и тогда будет производится поиск только по PID и VID.
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 (найденных в диспечтере устройств) не реагирует библиотека
Простите, что долго не отвечал. Само собой учтено, пишется как &H2010 и т.д., это я знаю, ошибок в программе вроде не допускал, может только я зря 2-х байтовый аргумет обозвал Integer'ом...