DFÜ Verbindung unter non NT-Systemen
-
Hi!!
Ich möchte gerne unter Win98 und co. eine DFÜ-Verbindung aufbauen und einen Auswahldialog haben.
Leider kann man die RasPhonebookDlg ja nur unter NT4.0 aufwärts benutzen.
Ich finde in der MSDN keine Methode um den Namen der eingetragenen Verbindungen auszulesen.
Bin ich blind oder ist das so einfach nicht möglich?
-
RasEnumConnections könnte dir weiterhelfen. Funzt AFAIK auf jeden fall mit Win9x
-
Zählt RasEnumConnections nicht nur alle aktiven Verbindungen auf?
Ich möchte ja aber alle Eingerichteten haben.
-
Was für Verbindung könnte es denn noch auflisten, außer die Eingerichteten? hä??
-
The RasEnumConnections function lists all active RAS connections. It returns each connection's handle and phone-book entry name.
Also daraus lese ich, daß es mir alle aktiven auflistet!!
Warum sollte ein Entry nen Handle haben, außer er ist aktiv?
Wenn der im Phonebook schlummert wird er wohl kaum nen handle haben, hä!?
-
sorry Frenzy, daran hatte ich überhaupt nicht gedacht.
RasEnumEntries
-
Brauchst Dich doch nicht zu entschuldigen!!
Ich sehe echt den Wald vor lauter Bäumen nimmer.........
Das habe ich gesucht......
Danke Dir
-
Zuerst würde ich sowieso mal schauen ob überhaupt ein Moden oder ISDN instaliert ist
RasEnumDevices
Dann schauen ob dein Eintrag nicht bereits besteht
RasValidateEntryNameDann dieses STRUCT füllen und eintragen. Funktioniert unter >= WIN95
RASENTRY rasEntry;
RasSetEntryPropertiesDie RASVerbindungen bekommt man so
RasEnumConnections
[ Dieser Beitrag wurde am 30.01.2003 um 06:18 Uhr von Unix-Tom editiert. ]
-
Leider bekomme ich da nix vernünftiges hinaus und ich bekomme auch immer die Meldung: error C2065: 'ERROR_BUFFER_TOO_SMALL' : nichtdeklarierter Bezeichner
Hier ist mein Code für RasEnumDevices
RASDEVINFO ras_DeviceInfo; ras_DeviceInfo.dwSize = sizeof( RASDEVINFO ); DWORD lpcb, lpcDevices; //lpcb = 255; //lpcDevices = 0; DWORD dw_Result = RasEnumDevices(&ras_DeviceInfo, (LPDWORD)&lpcb, (LPDWORD)&lpcDevices); switch( dw_Result ) { case ERROR_BUFFER_TOO_SMALL: MessageBox( "ERROR_BUFFER_TOO_SMALL" ); break; case ERROR_NOT_ENOUGH_MEMORY: MessageBox( "ERROR_NOT_ENOUGH_MEMORY" ); break; case ERROR_INVALID_PARAMETER: MessageBox( "ERROR_INVALID_PARAMETER" ); break; case ERROR_INVALID_USER_BUFFER: MessageBox( "ERROR_INVALID_USER_BUFFER" ); break; default: case 0: MessageBox( ras_DeviceInfo.szDeviceName ); break; } MessageBox( ras_DeviceInfo.szDeviceType, "DeviceType" );
[ Dieser Beitrag wurde am 30.01.2003 um 11:09 Uhr von Frenzy editiert. ]
-
In der MSDN steht doch alles (Beispiel, und auch Gründe warum ERROR_BUFFER_TOO_SMALL)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/rasenumdevices.asp
-
Danke für das Beispiel in der MSDN. Das ist bei meiner installierten Version nicht dabei oder ich habe es nicht gefunden.
Nur leider hilft mir das auch nicht weiter.
Muß ich den Heap-Speicher freigeben usw.???
Ich kann auch leider nicht per Index auf das Array zugreifen.
-
hmm, die Antworten müßten sich doch aus dem Beispiel raus ergeben:
Muß ich den Heap-Speicher freigeben usw.???
// // Free the memory if necessary. // if (NULL != lpRasDevInfo) { HeapFree(GetProcessHeap(), 0, lpRasDevInfo); lpRasDevInfo = NULL; }
Also ja.
Ich kann auch leider nicht per Index auf das Array zugreifen.
printf("The following RAS capable devices were found on this machine:\n\n"); for (i = 0; i < dwDevices; i++) { printf("%s\n", lpRasDevInfo[i]->szDeviceName); // ist das hier kein Index-Zugriff? :D }
-
long CRasClient::GetISDNCount() { DWORD dwSize = 0; DWORD dwNumOfDevices = 0; DWORD dwRV = RasEnumDevices(NULL, &dwSize, &dwNumOfDevices); RASDEVINFO *lpRdi = new RASDEVINFO[dwNumOfDevices]; lpRdi->dwSize = sizeof(*lpRdi); dwRV = RasEnumDevices(lpRdi, &dwSize, &dwNumOfDevices); if(dwRV != 0) { delete []lpRdi; return -1; } CString strType; int nisdnCount = 0; for(int i = 0; i < (int)dwNumOfDevices; i++) { strType = lpRdi[i].szDeviceType; if(strType.CompareNoCase("isdn") == 0) // = "RASDT_ISDN"; nisdnCount++; } delete []lpRdi; return nisdnCount; }
Liefert die Anzahl der ISDN-Devices zurück
-
Danke Dir Unix-Tom!!
Nur verstehe ich nicht warum man es am Anfang mit
DWORD dwRV = RasEnumDevices(NULL, &dwSize, &dwNumOfDevices);
aufruft. Das geht für mich nicht aus der MSDN hervor
Da bekomme ich dann die Größe wieder??
-
Mit dem ersten Aufruf fragt man nur die Anzahl der Geräte ab. Mehr nicht. Das ist dafür da, dass man die Array-Größe für den zweiten Aufruf bestimmen kann.
-
humm
Das hätten die auch mal hinschreiben können
Ist nicht gerade leicht sich da reinzufuchsen wenn man davon sonst weniger Ahnung hat....
Danke Euch...
Die nächste Hürde sind dann die Phonebook Entries
Das sollte ja aber nach dem gleichen Prinzip gehen.Brauche ich dafür denn eigentlich wirklich den Heap-Speicher??
*geht das mal versuchen*
-
Klar brauchst du den Heap-Speicher, da das ganze ja dynamisch gehen muss. Du kannst ja nicht vorher wissen wieviel Geräte der User hat. Du kannst natürlich auch new/delete anstatt HeapAlloc/HeapFree nehmen um die Speicher zu holen und wieder freizugeben.
-
Japp!
An dem Code-Beispiel von Unix-Tom habe ich es auch verstanden nun.
Bei RasEnumEntries habe ich nun das Problem, daß ich immer einen Wert über 0 wiederbekomme (Wert = 603). Leider kann ich den nicht interpretieren. Das mit ERROR_BUFFER_TOO_SMALL oder ERROR_NOT_ENOUGH_MEMORY geht leider nicht so ganz, da ich beim Kompilieren immer Fehlermeldungen bekomme, da ERROR_BUFFER_TOO_SMALL unbekannt ist.
Habe mich an Unix-Toms Beispiel orientiert, habe aber bestimmt wieder etwas übersehen.....long CRASDialDlg::GetEntryNames(CStringArray* cstrarr_EntryNames) { DWORD dwSize = 0; DWORD dwNumOfEntries = 0; DWORD dwEntry = RasEnumEntries( NULL, NULL, NULL, &dwSize, &dwNumOfEntries ); int i_EntryCount = (int)dwSize; RASENTRYNAME *lpRei = new RASENTRYNAME[dwNumOfEntries]; lpRei->dwSize = sizeof(*lpRei); dwEntry = RasEnumEntries(NULL, NULL, lpRei, &dwSize, &dwNumOfEntries ); if(dwEntry != 0) { delete []lpRei; return -1; } for(int i = 0; i < (int)dwNumOfEntries; i++) { cstrarr_EntryNames->Add(lpRei[i].szEntryName); } delete []lpRei; return i_EntryCount; }
[ Dieser Beitrag wurde am 30.01.2003 um 14:13 Uhr von Frenzy editiert. ]
-
603 Der Anruferpuffer ist zu klein. :p
-
Dritter Parameter von RasEnumEntries darf nicht NULL sein.