Czy ta kontrolka nie jest przypadkiem "obsolete" - tzn "nie uzywac w nowych programach" ?
J.
Czy ta kontrolka nie jest przypadkiem "obsolete" - tzn "nie uzywac w nowych programach" ?
J.
On Tue, 26 Apr 2005 10:34:23 +0200, "Grodo" <(zamienXna2000) snipped-for-privacy@poczta.onet.pl> wrote: [.....]
Tzn. taki interfejs, który jest prosty w użyciu i sprawdza się w typowych przypadkach. Ale za to nie pozwala na bardziej zaawansowane operacje na porcie jak np. asynchroniczne I/O (overlapped w nomenklaturze Microsoftu) czy ustawanie jakichś tam timeoutów dla I/O.
BTW. Żeby wszystko było jasne - VB widziałem tylko na obrazkach. :-)
W ogólności to musisz. Ale w praktyce, w 99% przypadków, nie musisz. :-) Oczywiście mam na myśli programowanie w C lub C++ z użyciem WinAPI.
Regards, /J.D.
Oczywiście wg. firmy MS programiści powinni kupować co roku nowsze narzędzia. Jednak nie oznacza to, że program napisany przy pomocy VB6.0 nie będzie działał.
Paweł
Marcin Łukasik (milea.pl) napisał(a):
No, osobiście piszę w masm32 i jestem zdrowy... ;)
A może Ktoś podeśle jakiś przykład w Delphi z komunikacji i konfiguracji Com-a oraz wysyłaniem i odbieraniem danych. Też się przymierzam do pisania aplikacji , mikrokontroler ma wysyłać 11- bitowe liczby do pc-ta. Miałem styczność z Delphi i wychowałem się na T.pascalu.
function OtworzPort(Port:string):THandle; var Param:TDCB; Uchwyt:THandle; begin Result:=0; Uchwyt := CreateFile (PChar(Port), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); if ( Uchwyt = INVALID_HANDLE_VALUE ) then Exit; Result:=Uchwyt; GetCommState(Uchwyt,Param); Param.BaudRate:=CBR_19200; Param.Flags:=(Param.Flags and 655535*65536+32768) or RTS_Control_Disable*4096 or DTR_Control_Enable * 16 or 1; Param.ByteSize:=8; Param.Parity:=NoParity; Param.StopBits:=OneStopBit; SetCommState(Uchwyt,Param); end;
Przykładowa funkcja wysyłająca zapytanie i czekająca na odpowiedź
function WyslijOdbierz(uchwyt:THandle;ilewys:word;bufnad:array of byte;ileodeb:word;var bufodb:array of byte):boolean; var ilosc:integer; czas:dword; Stan:TComStat; KodBledu:dword; begin repeat Application.ProcessMessages; ClearCommError(Uchwyt,KodBledu,@Stan); until stan.cbOutQue=0; WriteFile(Uchwyt,bufnad,ilewys,ilosc,nil); czas:=GetTime; repeat Application.ProcessMessages; ClearCommError(Uchwyt,KodBledu,@Stan); until ((stan.cbInQue >=ileodeb) or (abs(GetTime-czas)>1000));
If (stan.cbInQue <ileodeb) then begin result:=false;exit;end; if ileodeb>0 then ReadFile(uchwyt,bufodb,ileodeb,ilosc,nil); result:=true; end;
function GetTime:dword; //zwraca czas w milisekundach var czas:TSystemtime; begin GetSystemTime(czas); with czas do result:=wHour*360000+wMinute*6000+wSecond*100+wMilliseconds; end;
W pętle powplatane jest przetwarzanie komunikatów systemowych. Jak zrobisz transmisję na osobnym wątku, to takie zabawy nie będą potrzebne. Na końcu programu nie zapomnij o zamknięciu portu - CloseHandle(uchwyt).
łeeeeeeee......
Overlapped ruleZ :)
Zbych napisał:
Jak ja nienawidzę Pascala. A do szału mnie doprowadza - end end; i end. Do dziś nie wiem które gdzie wpisać. :-(
pzdr Artur
Daniel Dawid Majewski napisał:
To Ty HACKER jesteś ! ;-) Dziwne, że jeszcze CIA nie zażądała ekstradycji. ;-)
pzdr Artur
Have something to add? Share your thoughts — no account required.
Ask the community — no account required