Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с com портами [D7]


огого ©   (2004-11-05 12:42:00) 

Под win2000 делаю все это, а  DataOut(0,3FC);, DataOut(3,3FC); не работают почему-то?
PortIO.sys находится в каталоге с exe.

function OpenPort():integer; //запускать один раз при инициализации приложения
begin
try
 ser1:= 'PortIO'; //ключ реестра
 ser2:= 'All port system';//DisplayName
 hSCManager:=OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);//открываем SC Manager базу данных
 GetFullPathName('PortIO.sys',sizeof(acDriverPath),@acDriverPath,lpfPart); //полный путь
 path:= acDriverPath;
   //hService:= OpenService(hSCManager,PChar(ser1),SERVICE_START+$10000);
 hService:=CreateService(hSCManager,ser1,ser2,SERVICE_START+$10000,
          SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE,
          Path, nil, nil, nil, nil, nil);//создаем сервис драйвера
 str3:='SYSTEM\CurrentControlSet\Services\PortIO';//путь в реестре
 openkey:=RegOpenKeyEx(HKEY_LOCAL_MACHINE,str3,0,KEY_CREATE_SUB_KEY + KEY_SET_VALUE,Hkey1);
 dwProcessId:=GetCurrentProcessId;//получаем Id процесса
 str4:= 'ProcessId';
 openkey:=RegSetValueEx(Hkey1,str4,0, REG_DWORD,@dwProcessId, sizeof(DWORD));
 lpc:=nil;
 StartService(hService,0, lpc); //запускаем сервис
 RegDeleteValue(hkey1,str4);//удаляем значенпе в реестре
 RegCloseKey(hkey1); //закрываем ключ
 DeleteService(hService); //удаляем сервис
 CloseServiceHandle(hService);
 CloseServiceHandle(hSCManager);//закрываем SC Manager
 result:=0; //всё прошло успешно
except
 result:=1;//что-то не так
end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word); //подпрограмма работы с внешним кодом вывода значений через порт
 asm
    push dx//сохранить значения  dx в стеке
    mov dx,PortAddress//dx=0378h адресс порта данных
    mov al, ByteValue //al=ByteValue данные для вывода в порт
    out dx,al //операция вывода
    pop dx // востановить значения
 end;


-=SS=-   (2004-11-05 13:03:00) [1]


> out dx,al /

А что ты хотел ?  Под Win NT эта команда не покатит. Выдаст ошибку чтото типа "Priveleged Instruction"


Reindeer Moss Eater   (2004-11-05 12:55:00) [2]

Целых две статьи есть прямо на этом сайте.


Наверх

Титульная страница Поиск, карта сайта Написать письмо