Тема: Проблема с Ldk-100 и Tapi
На сервере настроено 3rd party соединение с атс, пытаюсь писать софт на VB. Не получается правильно инициализировать тапи - события не приходят. Пробовал и hidden window и events и самые разные версии тапи - результат нулевой. C атс, драйверами и т.п. все в порядке, это кривые руки. Трейсер стороннего производителя прекрасно все ловит.
Код такой
‘в форме
Private Sub Form_Load()
InitializeTAPI
End Sub
‘в модуле
Option Explicit
Private Declare Function lineInitializeEx Lib “tapi32.dll” Alias “lineInitializeExA” (ByRef lphLineApp As Long, ByVal hInstance As Long, ByVal lpfnCallback As Long, ByVal lpszFriendlyAppName As String, ByRef lpdwNumDevs As Long, ByRef lpdwAPIVersion As Long, ByRef lpLineInitializeExParams As LINEINITIALIZEEXPARAMS) As Long
Private Type LINEINITIALIZEEXPARAMS
dwTotalSize As Long
dwNeededSize As Long
dwUsedSize As Long
dwOptions As Long
hEvent As Long
dwCompletionKey As Long
End Type
Private hTAPI As Long
Private lLowAPI As Long
Private lHiAPI As Long
Private lLinesCount As Long
Public Function InitializeTAPI() As Boolean
Dim rc As Long
Dim Lip As LINEINITIALIZEEXPARAMS
Lip.dwTotalSize = Len(Lip)
Lip.dwOptions = 1 ‘LINEINITIALIZEEXOPTION_USEHIDDENWINDOW
lLowAPI = &H10003; ‘1.3
lHiAPI = &H20001; ‘2.1
rc = lineInitializeEx(hTAPI, App.hInstance, AddressOf LineCallbackProc, App.Title, _
lLinesCount, lHiAPI, Lip)
InitializeTAPI = rc = 0
End Function
Public Sub LineCallbackProc(ByVal hDevice As Long, ByVal dwMsg As Long, _
ByVal dwCallbackInstance As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long, ByVal dwParam3 As Long)
Debug.Print dwMsg
End Sub
Создано Antonariy
Пробовал и hidden window и events и самые разные версии тапи - результат нулевой.
USEHIDDENWINDOW не помню пробовал или нет, а USEEVENT работает ок с LDK TSP.
USEEVENT я тоже пробовал.
После lineInitializeEx запускал WaitForSingleObject lip.hEvent, -1 и так ничего и не дождался.
Ну не знаю.. Выводы можно сделать только увидев ваш код. (Повторяю: за метод hidden window ручатся не могу, а useevent в моем коде прекрасно работает.)
Хинт насчет hidden window (MSDN):
When the message is received (which can happen only when the application calls the Windows GetMessage function), Windows switches the process context..
Да ради бога.
Public Function InitializeTAPI() As Boolean
Dim rc As Long
Dim Lip As LINEINITIALIZEEXPARAMS
Lip.dwTotalSize = Len(Lip)
Lip.dwOptions = 2 ‘LINEINITIALIZEEXOPTION_USEEVENT
lLowAPI = &H10003; ‘1.3
lHiAPI = &H20001; ‘2.1
rc = lineInitializeEx(hTAPI, App.hInstance, AddressOf LineCallbackProc, App.Title, _
lLinesCount, lHiAPI, Lip)
If rc = 0 Then rc = WaitForSingleObject(lip.hEvent, -1)
End Function
Хотелось бы увидеть код, который железно работает у вас. Добавлю, все это делается под 2003м сервером.
rc = lineInitializeEx(hTAPI, App.hInstance, NULL, App.Title, _
lLinesCount, lHiAPI, Lip)
Так попробуйте.
Мой код могу выслать по емайл (код на asm’е если не смущает...)
Для LINEINITIALIZEEXOPTION_USEEVENT третий параметр игнорируется... так что null, не null…
Асм смущает. На чем-нибудь другом нет? Или для начала какой-нибудь exe-шник, который как-то сообщит, если что-то поймает. anton на gisoft в ru
Есть ещё исходники на С++. Насчет экзешника, вас чем то не устраивает -
Создано Antonariy
Трейсер стороннего производителя..
? Зачем нужен ещё один? Как поможет exe побороть проблему в ваших исходниках?
Не устраивает тем, что не могу посмотреть его исходников. А невбшные исходники не смогу откомпилировать, чтобы проверить работоспособность. Если то, что вы пришлете заработает, я в точности повторю на вб. Если на вб опять не заработает, значит это он виноват каким-то боком, попробую под .net.
Т. е. exe + исходники на cpp подойдет? Высылать?
Да!)
А если что, то вы сможете проверить мой exe у себя?
Ответ ушел почтой.
Спасибо, буду пробовать.