Delphi mondială - ce port

1. Ce port de

2. Câteva reguli pentru lucrul cu porturi

Trebuie avut în vedere faptul că dezvoltarea de programe care se ocupă cu porturile ar trebui să ia î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ță utilizați DLL standard, furnizat în kit-ul, problemele legate de porturile de management ale tunerului se decide imediat)

Astfel, retragerea - un pic de practică ...

Acest exemplu a fost luat de la mine numeroase Întrebări frecvente dedicate rețelei DELPHI FIDO Deci, pentru a lucra cu COM și LPT porturi, avem nevoie de cunoștințe de funcții Windows API.

Aici este o descriere detaliată a funcțiilor care avem nevoie (echivalentul C) pentru a lucra cu porturi. (Ne pare rău pentru orice traducere inexactități, dacă mă corectați dacă acest lucru nu este tradus)

Exemplu de cod pentru Delphi

Indicatorul pentru terminații nul (PCHAR). care specifică numele obiectului creat (fișier, canal, fanta de e-mail, resursa de comunicare (în acest caz porturi), dispozitivul de disc, consola sau director)

Indică tipul de acces la obiect ia valoarea

GENERIC_READ - citeste
GENERIC_WRITE - (predostovlyaet acces complet la operațiunea de amestecare GENERIC_READ GENERIC_READ și GENERIC_WRITE) pentru înregistrare

Set de steaguri de biți care determină modul în care obiectul poate fi divizat pentru a avea acces la acestea. Dacă dwShareMode - 0, obiectul nu poate fi divizat. Secvența de deschidere a obiectului nu va reuși, până când mânerul (mânerul) Deschideți obiectul este închis. De fapt, acesta este dat acces exclusiv.

Pentru separarea obiectului (țintă) utilizează o combinație de una sau mai multe dintre următoarele valori:

FILE_SHARE_DELETE (numai pentru Windows NT)
FILE_SHARE_READ
FILE_SHARE_WRITE

SECURITY_ATTRIBUTES pointer la structura care determină dacă mânerul returnat poate fi moștenită de procese copil. Dacă lpSecurityAttributes ZERO, marcatorul nu poate fi moștenită. Numai utilizate în Windows NT.

Acesta definește comportamentul funcției în cazul în care există deja obiectul și modul în care va fi deschis în acest caz, una dintre următoarele valori.

CREATE_NEW
Creează un nou obiect (fișier) throws o eroare în cazul în care există deja obiectul (fișier).

CREATE_ALWAYS
Creează o nouă funcție de obiect (fișier) suprascris obiect existent (fișier)

OPEN_EXISTING
Deschide obiect (fișier) throws o eroare în cazul în care obiectul (fișier) nu există. (Pentru mai multe detalii SDK aspect)

OPEN_ALWAYS
Deschide obiect (fișier), în cazul în care acesta există. În cazul în care un obiect (fișier) nu există, funcția creează ca și în cazul în care au fost dwCreationDistribution CREATE_NEW.

TRUNCATE_EXISTING
Deschide obiect (fișier). După aceea obiect (fișier) este trunchiat la zero, în cazul în care obiectul menționat eroare razmera.Vydaet (fișier) nu există.

atributele obiectului (fișier). atribute 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

Specifică mânerul pentru a GENERIC_READ accesul 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 reușește, valoarea returnată - un mâner deschis la obiect (fișier). Dacă fișierul nu există - 0.

În cazul în care au apărut defecțiuni, valoarea returnată - INVALID_HANDLE_VALUE. Pentru a obține informații despre eroare extinse, apel GetLastError.

Pentru porturi, parametrul dwCreationDistribution trebuie să fie OPEN_EXISTING, și trebuie să fie hTemplate Nil. Acces de citire-scriere trebuie să fie definite în mod clar.

Structura cuprinde o descriere de securitate pentru obiect, și determină dacă mânerul poate fi moștenită de copil.

nLungimea
Specifică dimensiunea, în octeți, a acestei structuri. Setați această valoare la dimensiunea SECURITY_ATTRIBUTES Structura în funcțiile Windows NT care utilizează structura SECURITY_ATTRIBUTES, nu verifica nLungimea valoare.

LpSecurityDescriptor
Descriptorul indicând un descriptor pentru obiectul de protecție, în cazul în care mânerul obiect gol poate fi atribuit moștenirea proceselor copilului.

BInheritHandle
Acesta determină dacă mânerul returnat este moștenită atunci când este creat un nou descriptor. Dacă această valoare este TRUE ia un nou descriptor moștenește de cap.

SECURITY_ATTRIBUTES pointer la o structură utilizată ca parametru în cele mai multe funcții windowing în Win32 API.