Показать сообщение отдельно
Старый 08.06.2007, 16:29   #1
kvitaliy
Оператор ЭВМ
 
Регистрация: 10.01.2007
Сообщений: 37
Написано 6 полезных сообщений
(для 5 пользователей)
RasApi32.DLL - кто знает, как с ней бороться?

Надо определить имена всех Dial Up соединений. У меня их несколько - три по именам сотовых операторов, да ещё и от стационарного телефона. Код на VB6 работает правильно, нашёл в сети код для С++, аналогично, ну ни как не могу
перевести на PureBasic. Вроде и ошибок не выдаёт, и работать не хочет. Может как то не правильно работаю со структурой, или не те типы переменных, или ещё что то? Посмотрите, кто грамотный, где могут быть грабли...

;Для VB6 рабочий пример

; Const RAS95_MaxEntryName = 256
; Private Type RASENTRYNAME95
;     dwSize As Long
;     szEntryName(RAS95_MaxEntryName) As Byte
; End Type
; Private Declare Function RasEnumEntries Lib "RasApi32.DLL" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
; Private Sub Form_Load()
;     Dim s As Long, l As Long, ln As Long, a$
;     ReDim R(255) As RASENTRYNAME95
;     Me.AutoRedraw = True
;     R(0).dwSize = 264 'Len(R(0))
;     s = 256 * R(0).dwSize
;     l = RasEnumEntries(vbNullString, vbNullString, R(0), s, ln)
;     For l = 0 To ln - 1
;         a$ = StrConv(R(l).szEntryName(), vbUnicode)
;         Me.Print Left$(a$, InStr(a$, Chr$(0)) - 1)
;     Next
;     If ln = 0 Then
;         Me.Print "No Dial-Up connections found!"
;     End If
; End Sub
; **************************************************************

;Для PB v4.01 не рабочий пример:(

#RAS95_MaxEntryName = 256


Structure  RASENTRYNAME95
    dwSize.l; As Long
    szEntryName.b[#RAS95_MaxEntryName]; As Byte
EndStructure

Global  Dim R.RASENTRYNAME95(255)
Global s.l,l.l,ln.l,a$

R(0)\dwSize = 264
s = 256 * R(0)\dwSize
l = RasEnumEntries_(#Null,#Null, R(0), s, @ln); ln - кол-во соединений Dial Up  определяет правильно!

   For l = 0 To ln - 1
       ;a$=Str(R(l)\szEntryName)
       Debug  R(l)\szEntryName  ; Вот тут не работает!
   Next 
      
 

; Кусок этого кода на C++

; RasEnumEntries(NULL, NULL, &re [0], &cb, &dwEntries);
; For(l = 0; l < dwEntries; l++)
; {
; printf(re[l].szEntryName); Вообще нет ни каких преобразований в Unicode!!!
; } 



If ln = 0 
    Debug "No Dial-Up connections found!"
EndIf
(Offline)