Так и делал, далее при тестировании выдавало что-то типа: "невозможно обратиться к 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) имеют одинаково названные функции... С другими функциями так-же...
В 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 скоро изготовлю, надеюсь не впустую...
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Совершенно не представляю, как мне объявить переменную из двух байт
Переменная не должна состоять из двух байт, точнее издвух переменных, а должна занимать в памяти два байта. Если верить этому, то тип переменной должен быть Integer. "VersionNumber" это не обяхательный параметр. В мето него можо указать -1 и тогда будет производится поиск только по PID и VID.
Простите, что долго не отвечал. Само собой учтено, пишется как &H2010 и т.д., это я знаю, ошибок в программе вроде не допускал, может только я зря 2-х байтовый аргумет обозвал Integer'ом...
Сейчас этот форум просматривают: konstz50 и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения