Toon posts:

C++ en het versturen van karakters, werkt niet in 2k & nt4

Pagina: 1
Acties:

Verwijderd

Topicstarter
C++:
1
2
3
4
5
6
7
int     Index;

    NMHTTP->Get("http://www.digibytes.net/~opslag/Website/uitvoer.txt");
    String cLetter = NMHTTP->Body;

for (Index = 1; Index <= cLetter.Length(); Index++)
    TransmitCommChar(hComm, cLetter[Index]);


Dit stukje code werkt wel in 95, 98 en XP, maar niet onder NT4 en 2000.
Waarom niet?

Het lijkt net alsof hij die for functie te snel uitvoerd.... het rare is namelijk als ik een breakpoint bij de for zet, en stap voor stap het programma laat uitvoeren alles perfect werkt.

De String cLetter wordt dus correct binnengehaald; en het programma werkt ook niet als ik daar een "vaste" string van maak.

Heeft iemand misschien een idee? Iets met een Sleep ofzo? (werkt niet).

Ik gebruik BCB5 trouwens.

[ Voor 5% gewijzigd door Verwijderd op 27-11-2002 18:17 ]


  • bigben04
  • Registratie: December 2001
  • Laatst online: 15:07
Ik weet wel dat onder NT en Win2000 bepaalde Windows API calls al een terugkeerwaarde opleveren voordat ze echt klaar zijn, ik heb hier zelf een probleem mee gehad met het renamen van files. Waarschijnlijk treedt dit verschijnsel dus ook op voor de functie die jij hier gebruikt. Ik heb het dus ook opgelost door een kunstmatige vertraging in te bouwen. Het is vies, maar het werkt...

edit: dit was overigens in C, niet in C++ (maakt voor de API call niet uit natuurlijk)

[ Voor 11% gewijzigd door bigben04 op 27-11-2002 18:36 ]


Verwijderd

Topicstarter
bigben04 schreef op 27 november 2002 @ 18:36:
Ik weet wel dat onder NT en Win2000 bepaalde Windows API calls al een terugkeerwaarde opleveren voordat ze echt klaar zijn, ik heb hier zelf een probleem mee gehad met het renamen van files. Waarschijnlijk treedt dit verschijnsel dus ook op voor de functie die jij hier gebruikt. Ik heb het dus ook opgelost door een kunstmatige vertraging in te bouwen. Het is vies, maar het werkt...

edit: dit was overigens in C, niet in C++ (maakt voor de API call niet uit natuurlijk)
En aan wat soort vertraging moet ik dan denken?
Want een sleep werkt dus niet, maar dat is opzicht ook wel logisch omdat hij op dat moment het hele "proces" stopt.

  • bigben04
  • Registratie: December 2001
  • Laatst online: 15:07
Verwijderd schreef op 27 november 2002 @ 18:46:
[...]
En aan wat soort vertraging moet ik dan denken?
Want een sleep werkt dus niet, maar dat is opzicht ook wel logisch omdat hij op dat moment het hele "proces" stopt.
Bijvoorbeeld een for-lus die 10000 keer telt ofzo. Ik heb overigens wel dit gevonden op msdn.microsoft.com:
If the device is not transmitting, TransmitCommChar cannot be called repeatedly. Once TransmitCommChar places a character in the output buffer, the character must be transmitted before the function can be called again. If the previous character has not yet been sent, TransmitCommChar returns an error
Wellicht heeft dit er iets mee te maken.

Verwijderd

Topicstarter
bigben04 schreef op 27 november 2002 @ 18:49:
[...]

Bijvoorbeeld een for-lus die 10000 keer telt ofzo. Ik heb overigens wel dit gevonden op msdn.microsoft.com:

[...]

Wellicht heeft dit er iets mee te maken.
mmm

dat zou inderdaad wel eens het probleem kunnen zijn. Maar dat is dus ongeveer hetzelfde probleem.... met een vertraging ertussen zou het moeten werken.
Of er zou een bitje terug moeten komen die zegt dat het karakter goed is verzonden zodat de volgende weer kan worden verzonden... mja; hoe je dat maakt :)

En dan is het nog steeds raar dat XP het wel doet; of zou XP de buffer kunnen beinvloeden?

  • Boy
  • Registratie: November 2001
  • Laatst online: 27-08 20:35

Boy

www.byoscoop.nl

Misschien moet je de poort eerst netjes openen voor gebruik onder NT? Maar ik ga ervanuit dat dit ook moet onder andere versie van Windows.

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • Boy
  • Registratie: November 2001
  • Laatst online: 27-08 20:35

Boy

www.byoscoop.nl

misschien moet je trouwens doen:

code:
1
2
if !(TransmitCommChar(hComm, cLetter[Index])) 
       return 0; //error


dan wacht ie misschien op een reply en doet dan verder de volgende?

Naar de bioscoop? => gebruik de app op Byoscoop.nl


Verwijderd

Topicstarter
Boy schreef op 27 november 2002 @ 18:53:
Misschien moet je de poort eerst netjes openen voor gebruik onder NT? Maar ik ga ervanuit dat dit ook moet onder andere versie van Windows.
Poort wordt al elders in het programma geopend.

  • BugBoy
  • Registratie: November 2002
  • Laatst online: 12:33
Haal even een library op die het voor je regelt. Ik heb zelf veel ervaring met RS-232 op alle Windows platformen, maar je kunt beter de COM-poort met "CreateFile" openen en daarna gewoon "WriteFile" gebruiken. Maar een library maakt het heel wat gemakkelijker...

The miracle isn't that I finished. The miracle is that I had the courage to start.


Verwijderd

Topicstarter
BugBoy schreef op 27 november 2002 @ 19:00:
Haal even een library op die het voor je regelt. Ik heb zelf veel ervaring met RS-232 op alle Windows platformen, maar je kunt beter de COM-poort met "CreateFile" openen en daarna gewoon "WriteFile" gebruiken. Maar een library maakt het heel wat gemakkelijker...
bedankt; ik kijk er vanacht of morgen naar.
Die site had ik al eerder even snel doorgelezen, maar ik stopte daar mee omdat hij serial.h niet kon vinden als ik die include.
Maar ik zal morgen even uitvissen hoe dat komt.

Bedankt ! (allemaal trouwens :) )

Tips blijven natuurlijk welkom ;)
Pagina: 1