Care este portul

Delphi. Sistemul de fișiere. porturi

1.Ce este un port

2. Unele reguli de lucru cu porturile

Trebuie avut în vedere că, atunci când se dezvoltă programe care tratează porturile, trebuie luate în considerare următorii factori.







  • Încercați să utilizați funcțiile de nivel înalt pentru a avea acces la porturile (în special WinAPI) și să nu folosească nivel inferior operațiunilor portuare de citire / scriere. Dacă decideți să scrie cu nivel scăzut de citire aceste proceduri trebuie să facă un DLL separat sau VxD, din următoarele motive: - este cunoscut faptul că sistemul de operare Windows95 / 98 și NT sunt în special sisteme de multitasking în mod inerent. Aceasta este în cazul în care programul se referă în mod specific la portul nu prin dinamic funcțiile de apel DLL sau vxd (utilizarea mecanismului DLL), în mod direct și acest lucru poate afecta funcționarea corectă a sistemului sau chiar umple-l. Și chiar dacă în / 98 această abordare Windows95 poate lucra bine în Windows NT, din cauza arhitecturii sale nu permite o citire directă / scrie în mod direct, precum și utilizarea de DLL sau mecanism VxD vă permite de a ocoli această problemă.
  • Dacă lucrați cu unele port non-standard de intrare de ieșire (de exemplu, portul de stocare starea butoanelor de control de la distanță TVTunera, atunci cu siguranță există un DLL furnizat software-ul nativ sau VxD pentru a controla acest dispozitiv și nu mai trebuie să scrie cod, așa că lucrez cu TVTunera de control de la distanță Eu folosesc DLL-ul standard furnizat în pachet, aceasta rezolvă imediat problemele legate de gestionarea porturilor acestui tuner)

Deci, retragerea este un pic de practică ...

Acest exemplu a fost luat de mine din numeroasele întrebări frecvente dedicate DELPHI în rețeaua Fido. Deci, pentru a lucra cu porturile COM și LPT avem nevoie de cunoașterea funcțiilor API-ului Windows.

Iată o descriere detaliată a funcțiilor de care avem nevoie (în echivalentul C) pentru lucrul cu porturile. (îmi pare rău pentru locurile posibile de traducere incorectă, dacă asta mă corectează dacă nu este tradus)

Cod exemplu de la Delphi

Indică un șir cu un caracter nul la sfârșit (PCHAR). care definește numele obiectului creat (fișier, canal, slot pentru poștă, resursă de comunicare (în acest caz porturi), dispozitiv de disc, atașament sau director)

Indică tipul de acces la obiect, ia valoarea

GENERIC_READ - pentru citire
GENERIC_WRITE - pentru înregistrare (amestecarea cu GENERIC_READ operațiunea GENERIC_READ și GENERIC_WRITE oferă acces complet)







Un set de steaguri de biți care definesc modul în care un obiect poate fi împărțit prin accesul la el. Dacă dwShareMode este 0, obiectul nu poate fi împărțit. Operațiile secvențiale ale deschiderii obiectului vor eșua până când mânerul (mânerul) obiectului deschis va fi închis. De fapt, accesul exclusiv este acordat.

Pentru a separa un obiect (țintă), utilizați o combinație a uneia sau mai multora dintre următoarele valori:

FILE_SHARE_DELETE (numai pentru Windows NT)
FILE_SHARE_READ
FILE_SHARE_WRITE

Un pointer la structura SECURITY_ATTRIBUTES, care determină dacă mânerul returnat poate fi moștenit de procesele copilului. Dacă lpSecurityAttributes este NULL, tokenul nu poate fi moștenit. Folosit numai în Windows NT.

Definește comportamentul funcției dacă obiectul există deja și modul în care acesta va fi deschis în acest caz Acceptă una dintre următoarele valori.

CREATE_NEW
Creează un obiect nou (fișier) Returnează o eroare dacă obiectul specificat (fișier) există deja.

CREATE_ALWAYS
Creează un obiect nou (fișier) Funcția suprascrie un obiect existent (fișier)

OPEN_EXISTING
Deschide un obiect (fișier) Returnează o eroare dacă obiectul (fișierul) specificat nu există. (Pentru o privire mai detaliată, consultați SDK-ul)

OPEN_ALWAYS
Deschide un obiect (fișier), dacă acesta există. Dacă obiectul (fișierul) nu există, funcția îl creează, ca și cum dwCreationDistribution ar fi CREATE_NEW.

TRUNCATE_EXISTING
Deschide obiectul (fișierul). După aceasta, obiectul (fișierul) va fi trunchiat la dimensiunea zero. Este o eroare dacă obiectul (fișierul) specificat nu există.

Atribute ale obiectului (fișier). atributele pot fi combinate

FILE_ATTRIBUTE_ARCHIVE
FILE_ATTRIBUTE_COMPRESSED
FILE_ATTRIBUTE_HIDDEN
FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_OFFLINE
FILE_ATTRIBUTE_READONLY
FILE_ATTRIBUTE_SYSTEM
FILE_ATTRIBUTE_TEMPORARY

Definește un handle cu acces GENERIC_READ la un obiect temporar (fișier). obiect temporar (fișier) furnizează atributele de fișiere și atribute extinse pentru obiectul creat (fișier) este utilizat numai în Windows NT Windows 95: Această valoare ar trebui să fie setat la zero.

Dacă funcția este reușită, valoarea returnată este descriptorul deschis pentru obiectul (fișierul) specificat. Dacă fișierul nu există - 0.

Dacă apar defecțiuni funcționale, valoarea returnată este INVALID_HANDLE_VALUE. Pentru a obține date extinse privind erorile, sunați la GetLastError.

Pentru porturi, parametrul dwCreationDistribution trebuie să fie OPEN_EXISTING, iar hTemplate trebuie să fie NIL. Accesul pentru citire-scriere trebuie să fie definit în mod explicit.

Structura conține o descriere a protecției obiectului și determină dacă descriptorul poate fi moștenit de către procesele copilului.

nLungimea
Specifică dimensiunea, în octeți, a acestei structuri. Setați această valoare la dimensiunea structurii SECURITY_ATTRIBUTES În Windows NT, funcțiile care utilizează structura SECURITY_ATTRIBUTES nu verifică valoarea nLength.

LpSecurityDescriptor
Un descriptor care indică un descriptor de securitate pentru obiect, dacă descriptorul de obiect DESTINATION poate fi atribuit pentru a moșteni prin procese copil.

BInheritHandle
Stabilește dacă mânerul returnat este moștenit când este creat noul mâner. Dacă această valoare ia TRUE, noul descriptor moșteneste de la părinte.

Indicatorul pentru structura SECURITY_ATTRIBUTES este folosit ca parametru în majoritatea funcțiilor de ferestre din API-ul Win32.







Articole similare

Trimiteți-le prietenilor: