Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Prośba o przerobienie procedurki na publiczną
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
Prośba o przerobienie procedurki na publiczną

Mam dość prozaiczny problem. Znalazłem w API Guide przykład rozłączania aktywnego połączenia modemowego i... chciałbym go przerbić tak, żeby mieć z niego funkcję w module, a nie ciągle wpisywać ten sam kawał kodu. Tylko coś mi to nie wychodzi... Pomożecie?

Const RAS_MAXENTRYNAME = 256
Const RAS_MAXDEVICETYPE = 16
Const RAS_MAXDEVICENAME = 128
Const RAS_RASCONNSIZE = 412
Private Type RasConn
    dwSize As Long
    hRasConn As Long
    szEntryName(RAS_MAXENTRYNAME) As Byte
    szDeviceType(RAS_MAXDEVICETYPE) As Byte
    szDeviceName(RAS_MAXDEVICENAME) As Byte
End Type
Private Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lpRasConn As Any, lpcb As Long, lpcConnections As Long) As Long
Private Declare Function RasHangUp Lib "rasapi32.dll" Alias "RasHangUpA" (ByVal hRasConn As Long) As Long
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail:
    'This program will close your Internet-connection, so to test this, you will have to open an Internet-connection.
    Dim i As Long, lpRasConn(255) As RasConn, lpcb As Long
    Dim lpcConnections As Long, hRasConn As Long
    'Set the structure's size
    lpRasConn(0).dwSize = RAS_RASCONNSIZE
    lpcb = RAS_MAXENTRYNAME * lpRasConn(0).dwSize
    lpcConnections = 0
    'Enumerate all the available connections
    returncode = RasEnumConnections(lpRasConn(0), lpcb, lpcConnections)

    If returncode = 0 Then
        For i = 0 To lpcConnections - 1
            hRasConn = lpRasConn(i).hRasConn
            'Hang up
            returncode = RasHangUp(ByVal hRasConn)
        Next i
    End If
End Sub


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


02-07-2004 19:09
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Sądząc po tym, że procedura zwie się Form_Load, znajdujemy się w module formy. Czyli z publicznych procedur nici . Natomiast możesz:
1) Zrobić to w zwykłym module i dać procedurę jako public.
2) Jeśli używasz jej tylko wewnątrz modułu tej formy - zmienić po prostu jej nazwę, ewentualnie wywoływać Form_load.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-07-2004 19:52
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Marcin_an - dzięki za odpowiedź, ale źle mnie zrozumiałeś. Ja dokładnie wiem o tym co napisałeś - wybrałem pierwszy sposób-wpakowałem do modułu i wszędzie dałem public i wsadziłm do funkcji, ale wtedy jak gdzieś w kodzie dam wywołanie tej funkcji to doatję komunikat: "Expected Variable or procedure, not module". Pewnie robię coś źle. Oto mój przerobiony kod w module:

Public Const RAS_MAXENTRYNAME = 256
Public Const RAS_MAXDEVICETYPE = 16
Public Const RAS_MAXDEVICENAME = 128
Public Const RAS_RASCONNSIZE = 412
Public Type RasConn
    dwSize As Long
    hRasConn As Long
    szEntryName(RAS_MAXENTRYNAME) As Byte
    szDeviceType(RAS_MAXDEVICETYPE) As Byte
    szDeviceName(RAS_MAXDEVICENAME) As Byte
End Type
Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lpRasConn As Any, lpcb As Long, lpcConnections As Long) As Long
Declare Function RasHangUp Lib "rasapi32.dll" Alias "RasHangUpA" (ByVal hRasConn As Long) As Long
Public Function Rozlacz()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail:
    'This program will close your Internet-connection, so to test this, you will have to open an Internet-connection.
    Dim i As Long, lpRasConn(255) As RasConn, lpcb As Long
    Dim lpcConnections As Long, hRasConn As Long
    'Set the structure's size
    lpRasConn(0).dwSize = RAS_RASCONNSIZE
    lpcb = RAS_MAXENTRYNAME * lpRasConn(0).dwSize
    lpcConnections = 0
    'Enumerate all the available connections
    returncode = RasEnumConnections(lpRasConn(0), lpcb, lpcConnections)

    If returncode = 0 Then
        For i = 0 To lpcConnections - 1
            hRasConn = lpRasConn(i).hRasConn
            'Hang up
            returncode = RasHangUp(ByVal hRasConn)
        Next i
    End If
End Function


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


02-07-2004 20:17
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

Nie wiem gdzie masz problem... u mnie Twoja przerobiona funkcja dziala prawidlowo i nie mam zadnych komunikatow o bledzie ... ;(

03-07-2004 01:35
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Zatem zacznijmy normalnie - czyli od nagłupszych spraw :
Nie nazwałeś przypadkiem tego modułu, gdzie masz funkcję jedną z nazw funkcji/zmiennej/stałej? Może nazwałeś Rozlacz formę lub coś w tym stylu? Bo tak na oko wygląda mi to na kolizję nazw funkcji i jakiegoś modułu.
Możliwe też jest, że moduł o takiej nazwie jest częścią zwykłych elementów VB (ale wtedy i Knight... miałby ten problem) lub którejś z dołączonych bibliotek.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

03-07-2004 09:41
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Marcin chyba ma rację. U mnie też działa, poza tym, że nie masz zadeklarowanej zmiennej returncode i kompilator to zgłasza, nie wiem czy masz ustawione Option Explicit w swoim projekcie, jeśli tak to tą zmienną masz zadeklarowaną w innym miejscu , jak i gdzie i czy to jest zmienna ? I nie używałabym akurat nazwy returncode jest to nieostrożne...


_____________________________________________
Karolina

03-07-2004 10:38
Pokaż profil karolinavb  Wyślij email do karolinavb   
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Już wszystko działa. Strasznie Was przepraszam za kłopot. Dzięki Knight of Lore wkopiowałem tę funkcję do pustego projektu i rzeczywiście zadziałała. Okazało się (tak jak sugerował marcin_an - thanks), że w moim programie nadałem taką samą nazwę funkcji jak i modułowi - stąd ten błąd. Jeszcze raz przepraszam i dzięki wszystkim .

P.S A co do returncode to też słuszna uwaga - poprawię


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


03-07-2004 11:01
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1