Toon posts:

[VC++] meest vage fout bij BuildCommDCB

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik hoor mensen nu al roepen dat ik de search moet gebruiken, er is al genoeg over comm-poort shit gepost. Dit heeft er echter weinig mee te maken, alhoewel ik ondanks dat heel got, google en de msdn docs heb afgestruind. Het volgende stukje source code is rechtstreeks afkomstig uit diezelfde msdn documentatie:

DCB dcb;
.
.
.
FillMemory(&dcb, sizeof(dcb), 0);

if (!GetCommState(handle, &dcb))
exit(1);

if (!BuildCommDCB("9600,n,8,1", &dcb)) <--- boosdoener
exit(1);

handle verwijst naar een geldige filehandler (COM1). Voor de rest is het programmaatje volledig kaal, settins voor de compiler (VC++ 6.0) staan standaard, met MFC in een shared DLL. Verder geen errors of warnings. Ik draai op win98se.

Zodra de boosdoener code-regel wordt bereikt krijg ik het bekende:
COMTEST heeft een fout met betrekking tot een ongeldige pagina veroorzaakt in
module KERNEL32.DLL

Iemand enig idee waarom dit voorbeeld, notabene rechtstreeks afkomstig van ms, bij mij niet draait? 'k Heb inmiddels de compiler opnieuw geinstalleerd, no luck.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Omdat het in NT niet mogenlijk is om de com poort rechtstreeks aan te spreken misschien? Het zou best kunnen dat dit voorbeeld alleen werkt voor Win9x.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op 04 november 2003 @ 11:10:
Omdat het in NT niet mogenlijk is om de com poort rechtstreeks aan te spreken misschien? Het zou best kunnen dat dit voorbeeld alleen werkt voor Win9x.
Ehm ik draai win98se, en in dit stadium van het programma probeer ik alleen een DCB aan te maken om de compoort te gaan configureren. Alle code die de compoort benaderd heb ik er verder al uitgesloopt en de fout geisoleert tot deze ene regel...

Overigens is het uiteindelijk wel de bedoeling dat de code uiteindelijk ook op NT draait dus als iemand een hint kan geven hoe ik een algemeen werkende oplossing tot configuratie van de Com-poort krijg hoor ik dat graag.

[ Voor 19% gewijzigd door Verwijderd op 04-11-2003 11:20 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:47
Dit is de code die ik hiervoor gebruik en die ook perfect werkt op NT

C++:
1
2
3
4
5
6
7
    ....
    if ( !GetCommState( _handle,  &_dcb ) )
        return ( ErrorGetCommState );

    if ( !BuildCommDCB( "COM1: baud=9600 parity=N data=8 stop=1", &_dcb ) )
        return (ErrorBuildCommDCB);
    ....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
farlane schreef op 04 november 2003 @ 11:35:
Dit is de code die ik hiervoor gebruik en die ook perfect werkt op NT

C++:
1
2
    ....
    ....
Thanx, maar dat is dezelfde code, op de fout-terugmedling na, en deze veroorzaakt bij mij dan ook precies dezelfde fout :(...
Als dit bij jou wel werkt, zie ik dan niet een of andere vage compiller optie over het hoofd?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik weet niet waarom je dit in de richting van de compiler zoekt maar die is duidelijk geen schuld hier. De gegenereerde code klopt, alleen de call veroorzaakt een knaller in KERNEL32.dll

My guess: foute drivers voor je COM-poorten, en of foute apparatuur aan de COM-poorten, of kapotte COM-poorten. Probeer eens op een willekeurige andere Win98SE bak?

offtopic:
developen op 9x is trouwens zelfmoord :z

Professionele website nodig?


  • Surehand
  • Registratie: Februari 2003
  • Laatst online: 18-08 15:40
Misschien dat het voorbeeld op deze pagina wel werkt? Het werkt in ieder geval bij mij op NT, VS 6

Verwijderd

Topicstarter
Surehand schreef op 04 november 2003 @ 11:48:
Misschien dat het voorbeeld op deze pagina wel werkt? Het werkt in ieder geval bij mij op NT, VS 6
Yes, dit werkt! Thanx. Ik ga toch nog even uitzoeken of ik de andere code werkend krijg; zou aan de drivers kunnen liggen maar dat betwijfel ik, 't is een Toshiba pc met custom win98se distributie, en windows is op vc++ na nog kaal. Ik laat nog even horen wat het reslutaat was.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Mag ik zeggen dat je gewoon aan het prutsen bent?

Uit MSDN citeer ik:
[in] Pointer to a null-terminated string that specifies device-control information. The function takes this string, parses it, and then sets appropriate values in the DCB structure pointed to by lpDCB.
The string must have the same form as the mode command's command-line arguments. For example, the following string specifies a baud rate of 1200, no parity, 8 data bits, and 1 stop bit:
code:
1
baud=1200 parity=N data=8 stop=1

The device name is ignored if it is included in the string, but it must specify a valid device, as follows:
code:
1
COM1: baud=1200 parity=N data=8 stop=1

For more information on mode, see the documentation for your operating system.
Jij geeft "9600,n,8,1", wat niet eens in de verte lijkt op de parameters van mode of die voorbeelden. Geen wonder dat de drivers dan knallen met zo'n lowlevelfunctie :/

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 04 november 2003 @ 12:11:
Mag ik zeggen dat je gewoon aan het prutsen bent?

Uit MSDN citeer ik:

[...]

Jij geeft "9600,n,8,1", wat niet eens in de verte lijkt op de parameters van mode of die voorbeelden. Geen wonder dat de drivers dan knallen met zo'n lowlevelfunctie :/
Sorry dude, ben niet aan het prutsen (niet deze keer iig ;)), heb de manier die je noemt al geprobeerd (mode string); ben pas later overgestapt op deze notatie, lijkt geen verschil te maken in de fout, blijkbaar accepteerd BuildCommDCB beide. Bewijs (wederom msdn):
For a string such as 96,n,8,1,p or any other older-form mode string that finishes with a p:
fInX, fOutX are both set to FALSE
fOutXDsrFlow,fOutXCtsFlow are both set to TRUE.
fDtrControl is set to DTR_CONTROL_HANDSHAKE
fRtsControl is set to RTS_CONTROL_HANDSHAKE
Bij "older-form mode strings" vult de functie deze opties dus zelf in, wat me voldoende bewijs lijkt dat ie ze uberhaupt accepteerd....

Anyway, de code werkt wel op andere windows 98 pc's, dus het zal aan deze pc liggen. Ik laat het probleem verder maar met rust: de nieuwe code werkt perfect.

[ Voor 25% gewijzigd door Verwijderd op 04-11-2003 12:39 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

In die old-style notatie was 9600 ook fout overigens (delen door 100 ;) ), maar okee ik had niet tot onderaan de Remarks doorgelezen :)

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:47
Verwijderd schreef op 04 november 2003 @ 11:41:
[...]


Thanx, maar dat is dezelfde code, op de fout-terugmedling na, en deze veroorzaakt bij
Nouwja, jouw format string is behoorlijk anders zoals curry al aangaf. Maar als die functie knal op jouw string, dan lijkt het alsof het parsen van die string niet goed gaat.

Beetje fout dat ie daarop knalt trouwens, misschien heb je wel een bug ontdekt. :) Misschien dat een service pack het probleem verhelpt ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

farlane schreef op 04 november 2003 @ 15:31:
[...]
Misschien dat een service pack het probleem verhelpt ?
Service pack?

Windows 98?

*proest* :D

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:47
curry684 schreef op 04 november 2003 @ 16:27:
[...]

Service pack?

Windows 98?

*proest* :D
Windows 98 SE ? :)

( Laten we Windows ME dan maar niet noemen want daar heeft volgens mij nog niemand echt veel service van gehad. integendeel ;) )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Heeft ie dus al: [rml]MuabDhib in "[ VC++] meest vage fout bij BuildCommDCB"[/rml] :Y)
( Laten we Windows ME dan maar niet noemen want daar heeft volgens mij nog niemand echt veel service van gehad. integendeel ;) )
:X :+

Professionele website nodig?

Pagina: 1