Страница: 1 |
Вопрос: Что за глюк? | Добавлено: 25.04.06 09:57 |
Автор вопроса: ![]() |
Использую функцию для определения инета: Public Function IsConnected() As String
Dim Ret As Long Dim RAS(255) As RASType, RASStatus As RASStatusType Dim lg As Long, lpconnection As Long, Result As Long Dim ss As String '0 - отключены, 1 - аутентификация, 2 - в сети RAS(0).dwSize = 412 lg = 256 * RAS(0).dwSize Result = RasEnumConnections(RAS(0), lg, lpconnection) Ret = InternetGetConnectedStateEx(Ret, sConnType, 254, 0) 'Debug.Print sConnType ss = sConnType ss = Replace(ss, Chr$(0), "", 1, 255) If lpconnection = 0 Then If Ret = 1 Then IsConnected = "2" & ss Else IsConnected = "0" End If Else RASStatus.dwSize = 160 Result = RasGetConnectStatus(RAS(0).hRasCon, RASStatus) If RASStatus.RasConnState = &H2000& Then 'Вот тут вываливается IsConnected = "2" & ss Else IsConnected = "1" End If End If End Function У меня работает, а у юзера вываливается. В чем проблема может быть? |
Ответы | Всего ответов: 11 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 26.04.06 11:11 |
Попробуй объявить sConnType локально - она же у тебя глобальная, так? Ret используется непроинициализированная. Это, конечно, мелочи, но лучше перестраховаться и ввести новую переменную flags as long=0.
Приведи описания структур, чтобы я мог попробовать у себя и на виртуальной тачке - не хотца лезть в С++... |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #2 | Добавлено: 26.04.06 11:56 |
Ret используется непроинициализированная. Это, конечно, мелочи, но лучше перестраховаться и ввести новую переменную flags as long=0.
Полный :lol: ![]() Neco, это же шестера ![]() 2gvozd Приведи декларацию своих АПИ. Отладчик все нормально показывает? |
Номер ответа: 3 Автор ответа: ![]() ![]() Разработчик Offline Client Вопросов: 164 Ответов: 1317 ![]() |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 26.04.06 12:13 |
Вот: Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, ByVal dwNameLen As Integer, ByVal dwReserved As Long) As Long
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 Declare Function RasEnumConnections Lib "RasApi32.DLL" _ Alias "RasEnumConnectionsA" (lpRasCon As Any, lpcb As _ Long, lpcConnections As Long) As Long Private Declare Function RasGetConnectStatus Lib "RasApi32.DLL" _ Alias "RasGetConnectStatusA" (ByVal hRasCon As Long, _ lpStatus As Any) As Long Const RAS_MaxEntryName = 256 Const RAS_MaxDeviceType = 16 Const RAS_MaxDeviceName = 32 Private Type RASType dwSize As Long hRasCon As Long szEntryName(RAS_MaxEntryName) As Byte szDeviceType(RAS_MaxDeviceType) As Byte szDeviceName(RAS_MaxDeviceName) As Byte End Type Private Type RASStatusType dwSize As Long RasConnState As Long dwError As Long szDeviceType(RAS_MaxDeviceType) As Byte szDeviceName(RAS_MaxDeviceName) As Byte End Type Private Type RASENTRYNAME95 dwSize As Long szEntryName(256) As Byte End Type Private sConnType As String * 255 Да все ок вроде, в отладке. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 26.04.06 12:52 |
Neco, это же шестера
![]() Меня напрягают кострукции, типа: Option Explicit
Private Sub Form_Load() Dim a As Long a = refa ![]() MsgBox a End Sub Function refa(ByRef value As Long) refa = 9 value = 5 End Function Зачем усложнять читабельность? Зачем делать так: ss = sConnType
ss = Replace(ss, Chr$(0), "", 1, 255) Если можно сделать так: ss = Replace(sConnType, Chr$(0), "", 1, 255)
Хотя здесь переменная предаётся ByVal и логического конфликта не происходит, не лучше ли сократить количество операций? Почему sConnType глобальная? Это мелочи, которые хоть и должны работать, но всё же если есть возможность их избежать - то надо избегать. Кстати, я проверил у себя код - пашет. Проверил на виртуальной тачке без установленного VB - тоже пашет. |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #5 | Добавлено: 26.04.06 14:16 |
Переменную ss сделай также, как и sConnType - As String*255, чтобы она у тебя была выделена буфером в стеке, а не через SysAllocxxx |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 343368641 Вопросов: 17 Ответов: 686 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 26.04.06 14:45 |
имхо велосипед. в примерах есть этот код и работает он не глючно! |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 26.04.06 15:00 |
имхо велосипед. в примерах есть этот код и работает он не глючно!
Ну и этот работает безглючно - но только не везде... |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #8 | Добавлено: 26.04.06 15:05 |
Попробуй создать дистрибутив. Бывает что и голый ВБшный проект на некоторых машинах глючит. |
Номер ответа: 9 Автор ответа: ![]() ![]() Разработчик Offline Client Вопросов: 164 Ответов: 1317 ![]() |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 26.04.06 15:47 |
Почему sConnType глобальная?
Не доглядел. Переменную ss сделай также, как и sConnType - As String*255, чтобы она у тебя была выделена буфером в стеке, а не через SysAllocxxx
Да я ss эту для того ввел, чтобы она без пустоты была. Кстати, а Len(sConnType) что вернет, реальную длину или 255? имхо велосипед. в примерах есть этот код и работает он не глючно!
Мне надо, чтобы определялась стадия аутентификации, а это в RAS, но тогда локалка не определятся, тут уже InternetGetConnectedStateEx. Попробуй создать дистрибутив. Бывает что и голый ВБшный проект на некоторых машинах глючит.
Визардом? |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 26.04.06 16:16 |
Лично я вообще не использую костантные стринги - предпочитаю маллочить память:
Option Explicit
Private Sub Form_Load() Dim stra As String stra = String(50, vbNullChar) ' ----- some api ------- Mid$(stra, 1, 10) = "1234567890" ' ---------------------- stra = CutByZero(stra) MsgBox stra End End Sub Private Function CutByZero(ByRef ToCut As String) As String CutByZero = "" Dim v As Integer If Len(ToCut) > 0 Then v = InStr(1, ToCut, vbNullChar) If v > 0 Then CutByZero = Left$(ToCut, v - 1) End If End If End Function Да я ss эту для того ввел, чтобы она без пустоты была. Кстати, а Len(sConnType) что вернет, реальную длину или 255?
Обязательно 255. Визардом?
Млин, ну может быть просто хапнуть свою библиотеку подмышку и вперёд? |
Номер ответа: 11 Автор ответа: ![]() ![]() Разработчик Offline Client Вопросов: 164 Ответов: 1317 ![]() |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 26.04.06 18:06 |
Какую библиотеку, если я только на апи? Сейчас поставил голую Винду СП2 на виртуалку - работает без проблем. |
Страница: 1 |
|