PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DeviceTyp ermitteln


Vincent
30.03.2002, 17:59
Hi,
mein Progrämmchen mit dem ich die DFÜ-Verbindung ändern kann habe ich fast fertig. Aber ich mal wieder auf ein Problem gestossen bei dem ich nicht den Fehler finde. Das Problem äussert sich wie folgt.
Ich habe folgende Geräte eingerichtet.


Sportster Flash X2
AVM ISDN Interet (PPP over ISDN)
3Com Etherlink III


Ich muss nun den DeviceTyp dem Programm übergeben, damit die Einwahl über das Gerät auch funktioniert. Dafür habe ich folgende Schleife geschrieben.


RASDEVINFO RasDevInfo;
LPRASDEVINFO lpRasDevInfo;
DWORD lpcb, lpcDevices;
lpcb = 0;
RasEnumDevices(NULL, &lpcb, &lpcDevices);
lpRasDevInfo = (LPRASDEVINFO) GlobalAlloc(GPTR, lpcb);
lpRasDevInfo->dwSize = sizeof(RasDevInfo);
RasEnumDevices(lpRasDevInfo, &lpcb, &lpcDevices);
for( int m=0; m < (int)lpcDevices; m++ )
{
if ( strcmp (lpRasDevInfo->szDeviceName, DevName ) == 0 )
{
char DType[50];
strcpy(DType, &quot;RASDT_&quot;);
strcat(DType, lpRasDevInfo->szDeviceType);
strcpy(rasEntry.szDeviceType, DType);
m = (int)lpcDevices;
}
else
{
lpRasDevInfo++;
}

}


Wenn ich aber das Programm starte, die ISDN Karte anwähle und veruschte mich einzuwählen bekomme ich als DeviceType &quot;modem&quot; zurück. Bei der LAN-Karte aber &quot;isdn&quot;.

Ich schlage mich jetzt schon ne ganze Weile mit dem Problem rum. Vielleicht findet ihr etwas was meine Auge nicht sehen wollen.

Thx.


xOOn
31.03.2002, 14:52
naja habe nichts gefunden wieso es nicht laufen sollte

das stand in der sdk:
Windows 95: The RASDT_Vpn device type is supported on Windows 95 only if Microsoft Dial-Up Networking Version 1.2 is installed. The RASDT_X25 and RASDT_Pad device types are not supported on Windows 95.

Windows 98/Me: The RASDT_Vpn device type is supported. However, the RASDT_X25 and RASDT_Pad device types are not supported.


und warum machst du
m = (int)lpcDevices;
ich glaube da kannste auch
break;
schreiben dann kapiert man es leichter

Vincent
31.03.2002, 17:04
Die Devices die nicht unterstützt werden habe ich ja gar nicht. Das Modem und die LAN-Karte sind Modems (der RASPPPoE Treiber sorgt dafür das die Netzwerkkarte als Modem angezeigt wird) und die Fritz ist natürlich nen ISDN Device. Daher ist das mit VPN und X25 etc. eigentlich egal. ;)

Zu der Schleife. Die Schleife soll solange laufen bis alle Geräte überprüft wurden ( m < (int)lpcDevices).

Die Schleife scheint auch zu funktionieren. Wenn ich ne Ausgabe mit einbaue stimmt der Gerätename. Aber der DeviceType wird nicht anscheinend nicht richtig ausgelesen. :(

Patrik Graf
31.03.2002, 20:53
Hmmm... hab auch nicht´s negatives entdecken können, aber probiers mal mit
m = (int)lpcDevices - 1
Ich denke mal, das du m für den Index deiner Liste brauchst...

Probiers einfach mal :D

Vincent
01.04.2002, 15:02
Damit läuft die Schleife doch nur bis zum vorletzten Device.

Ich habe es aber mal ausprobiert und bekomme jetzt beim letzten Device aus der Liste keine Type mehr angezeigt. Was ja im Falle von

m = (int)lpcDevices - 1

auch richtig ist, da ja nur die ersten beiden Devices überprüft werden.

Patrik Graf
01.04.2002, 16:37
Also, das ist eigentlich seltsam...

Du machst das ja so, das du die Devices abklapperst in einer Schleife und dann den jeweiligen Devicetyp aus der Structure ausliest. Normalerweise muß das funktionieren, da du ja den Index des Device aus der Schleife übernimmst. Es sei denn, &quot;(int)lpcDevices&quot; wäre 2 statt 3. Da die Schleife bei 0 anfängt, müsste &quot;(int)lpcDevices&quot; 3 sein, da es ja 3 Devices sind. Wenn es aber bis 2 geht, ist der Fehler ja schon klar. Müsste dann so aussehen:

for (int m = 0; m <= (int)lpcDevices; m++)
{
...
}

Aber wenn ich ehrlich bin, denke ich das nicht das es so ist. Ganz ehrlich gesagt, bin ich am Ende von meinem Latein angekommen. Ich glaube, das ist so ein klitzekleiner Denkfehler der niemandem auffällt und auf den nie irgent jemand kommen wird... :D

Vincent
01.04.2002, 17:37
Ich hoffe ja das jemand draufkommt. Denn der Device Type ist wichtig. :)

Ich hab einfach mal in die API Newsgroup von Borland gepostet, da ich beim suchen da auch nix passendes gefunden habe.

Die Schleife an sich funktioniert ja, aber ich bekomme halt nen falschen Wert zurück. Daher vermute ich mal das es nicht an der Schleife liegt.

Vincent
01.04.2002, 23:00
Die Lösung falls es jemand interessieren sollte sieht so aus. Gerade nach 10 Minuten im suchen vom codeguru.com Forum gefunden. ;)



RASDEVINFO RasDevInfo;
LPRASDEVINFO lpRasDevInfo;
DWORD lpcb, lpcDevices;
lpcb = 0;
RasEnumDevices(NULL, &lpcb, &lpcDevices);
lpRasDevInfo = (LPRASDEVINFO) GlobalAlloc(GPTR, lpcb);
lpRasDevInfo->dwSize = sizeof(RasDevInfo);
RasEnumDevices(lpRasDevInfo, &lpcb, &lpcDevices);
for( int m=0; m < (int)lpcDevices; m++ )
{
if ( strcmp (lpRasDevInfo->szDeviceName, DevName ) == 0 )
{
m = (int)lpcDevices;
}
lpRasDevInfo++;
}

char DType[50];
char dev[5];
strcpy(DType, &quot;RASDT_&quot;);
strcat(DType, lpRasDevInfo->szDeviceType);
strcpy(rasEntry.szDeviceType, DType);


Allerdings gibt die Netzwerkkarte nen komischen Wert zurück. Bin aber froh das erstmal Modem und ISDN geht, da mir die am wichtigsten sind. :)

Patrik Graf
02.04.2002, 00:47
Jo... viel hat sich zwar nicht verändert, aber wenn´s jetzt geht... :D

Danke das du die Lösung noch gepostet hast. ;)

xOOn
02.04.2002, 09:04
erstmal gut dass es funkt auch wenn es nicht funkten duerfte zumindest glaube ich das, es wird
if ( strcmp (lpRasDevInfo->szDeviceName, DevName ) == 0 )
verglichen, ist das ok, dann haben wir unserern eintrag gefunden da darf dann doch nicht
lpRasDevInfo++;
stehen

oder komm ich nicht mit :mauer: :mauer: :mauer:

Vincent
02.04.2002, 14:01
Hmm, eigentlich schon. Müsste ja eigentlich im else stehen.

Oder aber man baut das for ein bischen anders auf.


for( int m=0; m < (int)lpcDevices; m++, lpRasDevInfo++ )


Ich habe das Tool jetzt auf nen anderen Rechner probiert und da bekomme ich den Fehler 87.

xOOn
02.04.2002, 14:09
so ist es ok, aber oben killst du dir doch den letzten eintrag nicht dass es dir nur aus zufall das richtige gekommen ist
der zeigt den eintrag nach dem richtigen an!

wenn man nicht ALLES tauscht dann ist der code falsch, hast du probiert dass es mit for( int m=0; m < (int)lpcDevices; m++, lpRasDevInfo++ ) noch funkt !!!

Vincent
02.04.2002, 16:07
Ja, mit der geänderten for-Schleife geht es. So werde ich es auch erstmal lassen. Jetzt verstehe ich blos nicht warum ich auf dem anderen Rechner den Fehler 87 bekomme.
Die Parameter sollten eigentlich stimmen. ?(

Naja, werde ich nochmal alles überprüfen müssen. :(

Vincent
04.04.2002, 16:44
Hihi, war natürlich mein Fehler.
Man sollte die Parameter von dwFramingProtocol und dwfNetProtocol nicht vertauschen. Dann klappt es auch. ;)