AverTV Studio 307

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

AverTV Studio 307

Сообщение Mirus » 04.10.2004 (Пн) 18:43

Подскажите, как на VB у сабжевого девайса отлавливать нажатия кнопок на пульте?
Mirus

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 05.10.2004 (Вт) 11:31

Прошу прощения, что не в тему
А чо за девайс такой?

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 05.10.2004 (Вт) 11:47

Похоже что TV тюнер.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.10.2004 (Вт) 14:42

Поищи в интернете по слову Winlirk...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 23.01.2005 (Вс) 20:38

Помогите пожалуйста перевести код по теме на VB:

Auzol
используйте указатель на COM интерфейс IVampGPIO из библиотеки типов VampCOM 34com.dll
Чтобы опрашивать пульт, нужно читать биты GPIO и преобразовывать их в число.


Код: Выделить всё
pVmpDevEnum  : IVampDeviceEnum;
pVmpDev          : IVampDevice;
pVampGPIO       : IVampGPIO;
nDevCount, nIdx: Longint;
nGPIO0, nGPIO1 : Integer;
hr                      : HRESULT;

......................

hr := CoCreateInstance(CLASS_VampDeviceEnum, nil, CLSCTX_INPROC_SERVER, IID_IVampDeviceEnum, pVmpDevEnum);

if (hr <> NOERROR) then Exit;

nDevCount := pVmpDevEnum.DeviceCount();  // количество устройств на SAA713x

nIdx := 0;
pVmpDev := pVmpDevEnum.Get_Device(nIdx) as IVampDevice; // Открывате например первое устройство
if (pVmpDev <> Nil) then
  pVampGPIO := pVmpDev.Get_GPIO() as IVampGPIO;

if (pVampGPIO <> Nil) then begin
  nGPIO0 = pVampGPIO.ReadGPIO(0);
  nGPIO1 = pVampGPIO.ReadGPIO(1);

// читаете пины (у каждой карты декодер сидит на своих пинах)
end;

pVampGPIO := Nil;
pVmpDev := Nil;
pVmpDevEnum := Nil;


Вот, если нужно, ссылка на 34com.dll http://mirus.nm.ru/34com.rar
Mirus

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 29.01.2005 (Сб) 23:02

Вот что у меня получилось:
Добавил в "Проект->Ссылки" библиотеку 34com.dll
переписал код:
Код: Выделить всё
Option Explicit
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
Private Declare Function CoCreateInstance Lib "ole32.dll" (rclsid As GUID, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, riid As GUID, ByRef ppv As Any) As Long
Private Const CLSCTX_INPROC_SERVER = 1
Private pVmpDevEnum As IVampDeviceEnum
Private pVmpDev As IVampDevice
Private pVampGPIO As IVampGPIO
Private nDevCount As Long
Private nIdx As Long
Private nGPIO0 As Integer
Private nGPIO1 As Integer
Private hr As Long
Private CLASS_VampDeviceEnum As GUID
Private IID_IVampDeviceEnum As GUID
Private Sub Form_Load()
hr = CoCreateInstance(CLASS_VampDeviceEnum, 0, CLSCTX_INPROC_SERVER, IID_IVampDeviceEnum, pVmpDevEnum)
nDevCount = pVmpDevEnum.DeviceCount()
nIdx = 0
pVmpDev = pVmpDevEnum.Get_Device(nIdx)
pVampGPIO = pVmpDev.Get_GPIO()
nGPIO0 = pVampGPIO.ReadGPIO(0)
nGPIO1 = pVampGPIO.ReadGPIO(1)
End Sub


Этот код вылетает на строке nDevCount = pVmpDevEnum.DeviceCount() с ошибкой "Объектная переменная или переменная блока With не задана".

Вылетает наверное потому, что в списке Объектов нет класса IVampDeviceEnum.
Пробовал писать вместо Private pVmpDevEnum As IVampDeviceEnum - это: Private pVmpDevEnum As New VampDeviceEnum - VampDeviceEnum - такой класс отображается в списке Объектов, после этого начинает выполняться строка nDevCount = pVmpDevEnum.DeviceCount()

После изменения, выполнение кода останавливается нс строке pVmpDev = pVmpDevEnum.Get_Device(nIdx) с ошибкой "Объект не поддерживает это свойство или метод" - это наверное из-зп того, что в классе VampDeviceEnum как и в IVampDeviceEnum нет функции Get_Device. Пересмотрел все классы, ни в каком не нашел функцию Get_Device :(

Подскажите в чем может быть дело? В Delphi ведь код работает..
Mirus

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.01.2005 (Вс) 5:16

Уууууу :)

С интерфейсами работаем? :)
Гы-гы-гы...
А что в 34com.dll?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 30.01.2005 (Вс) 12:34

GSerg
С интерфейсами работаем?
С интерфейсами!

А что в 34com.dll?
Как понять "что"? Классы, функции для работы с тюнером, эта библиотека идет с драйвером к тюнеру.
Mirus

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.01.2005 (Вс) 13:08

А, ну да, она же у меня есть :)

Так вот...
В ней только описания интерфейсов.
А значений типа IID_IVampDeviceEnum там нет, так что нуно их самому накопать...

Посмотри функции IIDFromString и CLSIDFromString.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 30.01.2005 (Вс) 23:02

GSerg
А значений типа IID_IVampDeviceEnum там нет, так что нуно их самому накопать...
Спасибо! Накопал! Теперь код выглядит так:
Код: Выделить всё
Option Explicit
Private Type Guid
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As String, pCLSID As Guid) As Long
Private Declare Function IIDFromString Lib "ole32.dll" (ByVal lpsz As String, lpiid As Guid) As Long
Private Declare Function CoCreateInstance Lib "ole32.dll" (rclsid As Guid, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, riid As Guid, ppv As Any) As Long
Private Const CLSID_strVampDeviceEnum As String = "{B8A9279E-C453-11D4-AD45-0060080BA634}"
Private Const IID_strIVampDeviceEnum As String = "{B8A9279D-C453-11D4-AD45-0060080BA634}"
Private Const CLSCTX_INPROC_SERVER = 1
Private pVmpDevEnum As IVampDeviceEnum
Private pVmpDev As IVampDevice
Private pVampGPIO As IVampGPIO
Private nDevCount As Long
Private nIdx As Long
Private nGPIO0 As Integer
Private nGPIO1 As Integer
Private hr As Long
Private CLASS_VampDeviceEnum As Guid
Private IID_IVampDeviceEnum As Guid

Private Sub Form_Load()
CLSIDFromString StrConv(CLSID_strVampDeviceEnum, vbUnicode), CLASS_VampDeviceEnum
IIDFromString StrConv(IID_strIVampDeviceEnum, vbUnicode), IID_IVampDeviceEnum
hr = CoCreateInstance(CLASS_VampDeviceEnum, 0, CLSCTX_INPROC_SERVER, IID_IVampDeviceEnum, pVmpDevEnum)
nDevCount = pVmpDevEnum.DeviceCount()
nIdx = 0
pVmpDev = pVmpDevEnum.Get_Device(nIdx)
pVampGPIO = pVmpDev.Get_GPIO()
nGPIO0 = pVampGPIO.ReadGPIO(0)
nGPIO1 = pVampGPIO.ReadGPIO(1)
End Sub


Функция CoCreateInstance возвращает 0 - т.е. выполнилась правильно.
Начала выполняться строка nDevCount = pVmpDevEnum.DeviceCount() - возвращает количество устройств.
Теперь на строке pVmpDev = pVmpDevEnum.Get_Device(nIdx) останавливается с ошибкой "Объект не поддерживает это свойство или метод"

На Delphi эта строка выглядит так: pVmpDev := pVmpDevEnum.Get_Device(nIdx) as IVampDevice;
Может в as IVampDevice дело?
Mirus

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.01.2005 (Пн) 3:33

set pVmpDev = pVmpDevEnum.Get_Device(nIdx)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 31.01.2005 (Пн) 9:00

GSerg
set pVmpDev = pVmpDevEnum.Get_Device(nIdx)
Тоже самое пишет: "Объект не поддерживает это свойство или метод" :(
Mirus

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.01.2005 (Пн) 9:17

Мож и правда тогда не поддерживает? :)

Кстати, ты не напутал ничего с константами IID?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 31.01.2005 (Пн) 13:24

GSerg
Кстати, ты не напутал ничего с константами IID?
Вроде ни чего не напутал, их названия в реестре есть. И строка nDevCount = pVmpDevEnum.DeviceCount() выполняться начала...

Мож и правда тогда не поддерживает?
А как по точнее узнать это? Почему точно такой же код в Delphi работает?
Mirus


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 14

    TopList