Delphi свят - какво пристанище

1. Какво порт

2. Някои правила за работа с пристанища

Следва да се има предвид, че разработването на програми в областта на пристанищата трябва да вземе предвид следните фактори.

  • Опитайте се да използвате функциите на високо ниво за достъп до пристанищата (по-специално WinAPI), а не да се използва ниско ниво четат пристанищните операции / запис. Ако все пак решите да напишете ниско ниво четенето на тези процедури е необходимо да се направи отделен DLL или VXD, поради следните причини - известно е, че операционната система Windows 95/98 и NT са особено присъщо мултитаскинг системи. Това е, ако вашата програма се отнася специално до пристанището не чрез динамичните функции повикване DLL или VXD (използване DLL механизъм) пряко и това може да повлияе на правилното функциониране на системата или дори да го запълни. И дори ако в Windows95 / 98 Този подход може да работи в Windows NT, поради своята архитектура не позволява директно четене / запис директно, както и използването на DLL или VXD механизъм позволява да се заобиколи този проблем.
  • Ако работите с някои нестандартни входно-изходен порт (например порт съхраняване на състоянието на бутоните на дистанционното TVTunera на тогава със сигурност има DLL доставя родния софтуер или VXD за контрол на това устройство и вече трябва да напишете кода, не, така че аз съм на работа с TVTunera на дистанционното управление използвате стандартен DLL доставен в комплекта, тя веднага се решава въпроси, свързани с пристанищата на управление на тунера)

По този начин, отстъпление - малко практика ...

Този пример е взет от мен множество въпроси, посветена на DELPHI мрежа FIDO Така че, за работа с COM и LPT портове, ние трябва познаване на функциите на API на Windows.

Тук е подробно описание на функциите, които трябва (еквивалент на C) да работи с портове. (Съжалявам за всеки превод, неточности, ако ме коригира, ако това не е преведен)

Пример код за Delphi

Указател към нулева прекратява (PCHAR). в който се посочва името на създадения обект (файл, канал, поща слота, комуникационния ресурс (в този случай пристанища), диск устройство, конзола, или директория)

Показва начина на достъп до обекта е на стойност

GENERIC_READ - четете
GENERIC_WRITE - (predostovlyaet пълен достъп до операцията смесване GENERIC_READ GENERIC_READ и GENERIC_WRITE) за запис

Разположен на битови флагове, които определят как обектът може да се раздели на достъпа до нея. Ако dwShareMode - 0, обектът не може да бъде разделена. Последователността на отваряне на обекта ще се провали, докато дръжка (дръжката) Отваряне на обекта е затворен. В действителност, тя се дава изключителен достъп.

За разделяне на обекта (мишена) се използва комбинация от един или повече от следните стойности:

FILE_SHARE_DELETE (само за Windows NT)
FILE_SHARE_READ
FILE_SHARE_WRITE

SECURITY_ATTRIBUTES указател към структурата, която определя дали се връща дръжката може да бъде наследен от деца процеси. Ако lpSecurityAttributes ZERO, маркерът не може да се наследява. Използва се само в Windows NT.

Той определя поведението на функцията, ако обектът вече съществува и как тя ще бъде отворена в този случай една от следните стойности.

CREATE_NEW
Създава нов обект (файл) Хвърля за грешка, ако на обекта (файл) вече съществува.

CREATE_ALWAYS
Създава нова функция обект (файл) се записва върху съществуващ обект (файл)

OPEN_EXISTING
Отваря обект (файл) Хвърля за грешка, ако на обекта (файл) не съществува. (За по-подробен поглед SDK)

OPEN_ALWAYS
Отваря обект (файл), ако има такъв. Ако даден обект (файл) не съществува, функцията тя създава, като че ли бяха dwCreationDistribution CREATE_NEW.

TRUNCATE_EXISTING
Отваря обект (файл). След обект (файл) е съкратено до нула, ако заяви razmera.Vydaet грешка обект (файл) не съществува.

атрибути на обекта (файл). атрибути могат да бъдат комбинирани

FILE_ATTRIBUTE_ARCHIVE
FILE_ATTRIBUTE_COMPRESSED
FILE_ATTRIBUTE_HIDDEN
FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_OFFLINE
FILE_ATTRIBUTE_READONLY
FILE_ATTRIBUTE_SYSTEM
FILE_ATTRIBUTE_TEMPORARY

Задава дръжката, за да GENERIC_READ достъп до временен обект (файл). Временен обект (файл) доставя файлови атрибути и разширени атрибути за създаване на нов обект (файл) се използва само в Windows NT Windows 95: Тази стойност трябва да бъде настроен на нула.

Ако функцията е успешен, за връщане стойност - отворена дръжка на обект (файл). Ако файлът не съществува - 0.

Ако са настъпили неизправности, за връщане стойност - INVALID_HANDLE_VALUE. За да получите разширена информация за грешка, обадете GetLastError.

За пристанища, параметър dwCreationDistribution трябва да OPEN_EXISTING, и трябва да бъде hTemplate Nil. Достъп за четене и запис трябва да се дефинира ясно.

Структурата включва описание на сигурността на обекта и определя дали дръжката може да бъде наследен от детето.

NLength
Определя размера в байтове, на тази структура. Задайте стойност на размера на SECURITY_ATTRIBUTES на структура в Windows NT функции, които използват SECURITY_ATTRIBUTES структура, не се покажат nLength на стойност.

LpSecurityDescriptor
Descriptor което показва част от описание на обекта на защита, ако дръжка празен обект може да бъде назначен за наследството на деца процеси.

BInheritHandle
Той определя дали се връща дръжката се наследява, когато се създава нова ЕВРОВОК. Ако тази стойност е вярно взема нов ЕВРОВОК наследява от главата.

SECURITY_ATTRIBUTES указател към структура се използва като параметър в повечето функции Windowing в API Win32.