port COM + Win2K + API

0

Witam!!
Potrzebuje otworzyc port com, wysylac i odbierac z tego portu informacje, robie to w nastepujacy sposob:
//najpierw deklaracje
COM_N:String;
DCB: TDCB;
Config : String;
Errorek,dlugosc:Integer;
ComId :THandle;
Edit1: TEdit;
CommTimeouts : TCommTimeouts;

//no i zaczynamy
COM_N:='COM1';
ComId:=CreateFile(PChar(COM_N),GENERIC_READ or GENERIC_WRITE,0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);//otwarcie portu
//KONFIGURACJA
if not SetupComm(ComId, RxBufferSize, TxBufferSize) then
begin
ShowMessage('SetupComm error');
exit;
end;
if not GetCommState(ComId, DCB) then
begin
ShowMessage('GetCommState error');
exit;
end;

    Config := 'baud=1200 parity=n data=8 stop=1';

    if not BuildCommDCB(@Config[1], DCB) then
    begin
      ShowMessage('BuildCommDCB error');
      exit;
    end;

    if not SetCommState(ComId, DCB) then
    begin
      ShowMessage('SetCommState error');
      exit;
    end;

   with CommTimeouts do
    begin

      ReadIntervalTimeout := 0;
      ReadTotalTimeoutMultiplier := 0;
      ReadTotalTimeoutConstant := 5000;
      WriteTotalTimeoutMultiplier := 0;
      WriteTotalTimeoutConstant := 2000;

    end;

    if not SetCommTimeouts(ComId, CommTimeouts) then
    begin
      ShowMessage('SetCommTimeouts error');
      exit;
    end;

//KONIEC KONFIGURACJI
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CloseHandle(ComId); // Zamknięcie COM'a
COM_N:='0';
Label1.Caption:='Brak otwartego portu';Label3.Caption:='Brak otwartego portu';
Button1.Visible:=False; Button2.Visible:=True;
RadioButton1.Visible:=True; RadioButton2.Visible:=True;
RadioButton3.Visible:=True; RadioButton4.Visible:=True;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
tresc:PChar;
bytesToWrite,IPbytes,BytesRead:Cardinal;
test:POverlapped;
Ustawienia_Portu:TDcb;
Timeouty:TCommTimeouts;
d:array[1..1024] of Char;
//Konfiguracja : TCommConfig;
errorek : Integer ;
begin
WriteFile(ComId, tresc,bytesToWrite,IPbytes, Nil);
sleep(2);
if not ReadFile(ComId, d, sizeof(d), BytesRead, Nil) then
begin
ShowMessage('ReadFile error');
exit;
end;
end
end;

No wiec robie to tak jak opisalem powyzej (oczywiscie jest to pseudokod,ale najwazniejsze rzeczy zosatwilem tak jak mam zadeklarowane w programie). Problem jest taki ze podczas proby wyslania zglaszany jest komunikat "Nieprawidlowe dojscie" nie mam pojecia o co chodzi, wydaje mi sie ze wszystko jest ok,ale niestety ciagle ten sam blad.
Jak macie jakies sygestie to prosze o rade

Z gory dzieki

0

Win2k nie daje tak prostego dojścia do portów. Poszukaj komponentu od tego (może jest nawet na tej stronie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1