DFÜ Verbindung unter non NT-Systemen
-
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.
-
Original erstellt von <´------>:
Dritter Parameter von RasEnumEntries darf nicht NULL sein.Ich denke beim 1. Aufruf muß der NULL sein, damit ich die Size wiederbekomme?
Und warum wird ERROR_BUFFER_TOO_SMALL nicht erkannt und als Fehler beim Kompilieren ausgegeben?
-
das steht doch schon alles im beispiel aus der doku. kopier dir das doch einfach und dann lerne es zu verstehen
-
Original erstellt von <och menno>:
das steht doch schon alles im beispiel aus der doku. kopier dir das doch einfach und dann lerne es zu verstehenTjo.......Nur leider kapier ich das nicht!
Das von Unix-Tom war mir weitaus verständlicher......http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/rasenumentries.asp <= Daraus werde ich nicht schlau
-
vielleicht daraus? is'n anderes beispiel aus der msdn:
lpRasEntryName = (LPRASENTRYNAME)GlobalAlloc(GPTR, sizeof(RASENTRYNAME)); lpRasEntryName->dwSize = sizeof(RASENTRYNAME); if ((nRet = RasEnumEntries(NULL, NULL, lpRasEntryName, &cb, &cEntries)) == ERROR_BUFFER_TOO_SMALL) { lpRasEntryName = (LPRASENTRYNAME)GlobalAlloc(GPTR, cb); lpRasEntryName->dwSize = sizeof(RASENTRYNAME); } // Calling RasEnumEntries to enumerate the phone-book entries nRet = RasEnumEntries(NULL, NULL, lpRasEntryName, &cb, &cEntries); if (nRet != ERROR_SUCCESS) { printf("RasEnumEntries failed: Error %d\n", nRet); } else { printf("Phone-book entries in the default phone book:\n\n"); for(i=0;i < cEntries;i++) { printf("%s\n",lpRasEntryName->szEntryName); lpRasEntryName++; } }
-
humm........
Leider auch nicht......
Das muß doch auf dem Weg wie weiter oben von mir geposted auch gehen....
*rauft sich die Haare*
-
Der Code den <ddddd> ist doch total kurz & verständlich. Was ist daran bitteschön nicht zu verstehen? :o